Ist ein Java-Int immer 32 Bit?

82

Wird Java intimmer und überall eine 32-Bit-Ganzzahl mit Vorzeichen sein?

nicael
quelle
Die Anzahl der zur Darstellung eines int-Werts verwendeten Bits ist die Konstante Integer.SIZE, die wie public static final int SIZE = 32;seit Java 1.5 angegeben ist.
burnabyRails

Antworten:

122

Ja, es ist in der Java-Sprachspezifikation definiert .

Aus Abschnitt 4.2: Primitive Typen und Werte :

Die Integral-Typen sind byte, short, int, und long, deren Werte sind 8-Bit, 16-Bit, 32-Bit und 64-Bit - signierte Zweierkomplement-Ganzzahlen sind, und char, deren Werte sind 16-Bit Integer ohne Vorzeichen UTF-16 - Code , der Einheiten (§3.1).

Und zusätzlich aus Abschnitt 4.2.1: Integrale Typen und Werte :

Die Werte der Integraltypen sind Ganzzahlen in den folgenden Bereichen:

  • Für Byte von -128 bis einschließlich 127
  • Kurz gesagt, von -32768 bis einschließlich 32767
  • Für int von -2147483648 bis einschließlich 2147483647
  • Für lange von -9223372036854775808 bis einschließlich 9223372036854775807
  • Für char von '\ u0000' bis '\ uffff' einschließlich, dh von 0 bis 65535
Coobird
quelle
8

ints sind 32 Bit. Wenn Sie mehr benötigen, sind longs 64 Bit.

drRoflol
quelle
6

Java 8 hat Unterstützung für vorzeichenlose Ganzzahlen hinzugefügt. Das Grundelement intist weiterhin signiert, einige Methoden interpretieren sie jedoch als vorzeichenlos.

Die folgenden Methoden wurden der Integer-Klasse in Java 8 hinzugefügt :

  • compareUnsigned (int x, int y)
  • dividierenUnsigned (int dividend, int divisor)
  • parseUnsignedInt (String s)
  • parseUnsignedInt (String s, int radix)
  • restUnsigned (int dividend, int divisor)
  • toUnsignedLong (int x)
  • toUnsignedString (int i)
  • toUnsignedString (int i, int radix)

Hier ist ein Anwendungsbeispiel:

public static void main(String[] args) {
    int uint = Integer.parseUnsignedInt("4294967295");
    System.out.println(uint); // -1
    System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}
Roblovelock
quelle
3

Wenn 64 Bit nicht Ihren Anforderungen entsprechen, versuchen Sie es mit java.math.BigInteger .

Es ist für Situationen geeignet, in denen die Anzahl außerhalb des Bereichs von 64 Bit liegt.

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);
    
}

Die Ausgabe ist:

Die Summe ist: 18446744073709551614

Der Unterschied ist: -18446744073709551615

Das Produkt ist: -85070591730234615856620279821087277056

Der Quotient ist: 1

Eugene
quelle