Ist ein Java int immer 32 Bit?

Lesezeit: 2 Minuten

Wird Javas int immer und überall eine 32-Bit-Ganzzahl mit Vorzeichen sein?

  • Die Anzahl der Bits, die zur Darstellung eines int-Werts verwendet werden, ist die Konstante Integer.SIZE, die als angegeben wird public static final int SIZE = 32; seit Java 1.5.

    – burnabyRails

    28. August 2020 um 12:14 Uhr


Benutzer-Avatar
coobird

Ja, es ist definiert in Die Java-Sprachspezifikation.

Aus Abschnitt 4.2: Primitive Typen und Werte:

Die ganzzahligen Typen sind byte, short,
intund longderen Werte 8-Bit-, 16-Bit-, 32-Bit- bzw. 64-Bit-Zweierkomplement-Ganzzahlen mit Vorzeichen sind, und charderen Werte 16-Bit-Ganzzahlen ohne Vorzeichen sind, die UTF-16-Codeeinheiten darstellen (§3.1).

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

Die Werte der ganzzahligen Typen sind ganze Zahlen 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 einschließlich ‘\uffff’, also von 0 bis 65535

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

Java 8 hat etwas Unterstützung für Ganzzahlen ohne Vorzeichen hinzugefügt int ist immer noch signiert, einige Methoden interpretieren sie jedoch als unsigniert.

Die folgenden Methoden wurden hinzugefügt Integer-Klasse unter Java8:

  • vergleicheUnsigned(int x, int y)
  • divideUnsigned(int Dividende, int Divisor)
  • parseUnsignedInt(String s)
  • parseUnsignedInt(String s, int radix)
  • restUnsigned(int Dividende, int Divisor)
  • toUnsignedLong(int x)
  • toUnsignedString(int i)
  • toUnsignedString(int i, int radix)

Hier ist eine beispielhafte Verwendung:

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

Benutzer-Avatar
Eugen

Als Ergänzung, wenn 64 Bits nicht Ihren Anforderungen entsprechen, versuchen Sie es java.math.BigInteger.

Es eignet sich für Situationen, in denen die Nummer den Bereich von 64 Bit überschreitet.

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

1244940cookie-checkIst ein Java int immer 32 Bit?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy