Will Java int
toujours et partout être un entier signé de 32 bits ?
Réponses
Trop de publicités?Oui, il est défini dans La spécification du langage Java .
De Section 4.2 : Types et valeurs primitifs :
Les types intégraux sont
byte
,short
,int
ylong
, 16 bits, 32 bits et 64 bits signés signés à complément à deux, respectivement, etchar
dont les valeurs sont sont des entiers non signés de 16 bits représentant les unités de code UTF-16 (§3.1).
Et en plus de Section 4.2.1 : Types et valeurs d'intégrales :
Les valeurs des types intégraux sont entiers dans les plages suivantes :
- Pour l'octet, de -128 à 127, inclus.
- En bref, de -32768 à 32767, inclus.
- Pour int, de -2147483648 à 2147483647, inclusivement
- Pour les longues périodes, de -9223372036854775808 à 9223372036854775807, inclusivement.
- Pour l'omble, de ' \u0000 à \uffff inclusivement, c'est-à-dire de 0 à 65535.
Java 8 a ajouté un support pour les entiers non signés. int
sont toujours signés, mais certaines méthodes les interpréteront comme non signés.
Les méthodes suivantes ont été ajoutées à l Classe de nombres entiers en Java 8 :
- compareUnsigned(int x, int y)
- divideUnsigned(int dividend, int divisor)
- parseUnsignedInt(Chaîne s)
- parseUnsignedInt(Chaîne s, int radix)
- remainderUnsigned(int dividend, int divisor)
- toUnsignedLong(int x)
- toUnsignedString(int i)
- toUnsignedString(int i, int radix)
Voici un exemple d'utilisation :
public static void main(String[] args) {
int uint = Integer.parseUnsignedInt("4294967295");
System.out.println(uint); // -1
System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}
En complément, si la longueur de 64 bits ne répond pas à votre besoin, essayez java.math.BigInteger .
Il convient aux situations où le nombre est au-delà de la plage de longueur de 64 bits.
public static void main(String args[]){
String max_long = "9223372036854775807";
String min_long = "-9223372036854775808";
BigInteger b1 = new BigInteger(max_long);
BigInteger b2 = new BigInteger(min_long);
BigInteger sum = b1.add(b1);
BigInteger difference = b2.subtract(b1);
BigInteger product = b1.multiply(b2);
BigInteger quotient = b1.divide(b1);
System.out.println("The sum is: " + sum);
System.out.println("The difference is: " + difference);
System.out.println("The product is: " + product);
System.out.println("The quotient is: " + quotient);
}
La sortie est :
La somme est : 18446744073709551614
La différence est : -18446744073709551615
Le produit est : -85070591730234615856620279821087277056
Le quotient est : 1