Czy Java intzawsze i wszędzie będzie 32-bitową liczbą całkowitą ze znakiem?
Odpowiedzi:
Tak, jest to zdefiniowane w specyfikacji języka Java .
Z punktu 4.2: Typy i wartości pierwotne :
Integralne typy
byte,short,int, ilong, których wartości są 8-bitowy, 16-bitowy, 32-bitowy i 64-bitową uzupełnienie do dwóch liczb całkowitych, odpowiednio, ichar, których wartości są 16-bitowe liczby całkowite bez znaku reprezentujący kod UTF-16 jednostki (§ 3.1).
Oraz dodatkowo z punktu 4.2.1: Typy i wartości całkowe :
Wartości typów całkowitych są liczbami całkowitymi w następujących zakresach:
- Dla bajtów od -128 do 127 włącznie
- W skrócie od -32768 do 32767 włącznie
- Dla int, od -2147483648 do 2147483647 włącznie
- Długo, od -9223372036854775808 do 9223372036854775807 włącznie
- W przypadku char, od „\ u0000” do „\ uffff” włącznie, czyli od 0 do 65535
Java 8 dodała obsługę liczb całkowitych bez znaku. Prymityw intjest nadal ze znakiem, jednak niektóre metody będą interpretować je jako bez znaku.
Następujące metody zostały dodane do klasy Integer w Javie 8:
Oto przykład użycia:
public static void main(String[] args) {
int uint = Integer.parseUnsignedInt("4294967295");
System.out.println(uint); // -1
System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}
Dodatkowo, jeśli długość 64 bitów nie spełnia Twoich wymagań, wypróbuj java.math.BigInteger .
Nadaje się do sytuacji, w których liczba jest poza zakresem 64 bitów.
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);
}
Wynik to:
Suma to: 18446744073709551614
Różnica to: -18446744073709551615
Produkt to: -85070591730234615856620279821087277056
Iloraz to: 1
public static final int SIZE = 32;od wersji Java 1.5.