Будет ли Java intвсегда и везде 32-битным целым числом со знаком?
Ответы:
Да, это определено в спецификации языка Java .
Из Раздела 4.2: Примитивные типы и значения :
Интегральные типы
byte,short,int, иlong, чьи значения 8-бит, 16 бит, 32-биты и 64-разрядный подписанный дополнительный код комплемент целых чисел, соответственно, иchar, значение которых 16-битный целые числа без знака , представляющего UTF-16 код единиц (§3.1).
И дополнительно из Раздела 4.2.1: Интегральные типы и значения :
Значения целочисленных типов являются целыми числами в следующих диапазонах:
- Для байта от -128 до 127 включительно
- Короче от -32768 до 32767 включительно
- Для int от -2147483648 до 2147483647 включительно.
- На длинные, от -9223372036854775808 до 9223372036854775807 включительно
- Для char от '\ u0000' до '\ uffff' включительно, то есть от 0 до 65535
В Java 8 добавлена поддержка беззнаковых целых чисел. int по-прежнему подписан, однако некоторые методы интерпретируют их как беззнаковые.
Следующие методы были добавлены к классу Integer в Java 8:
Вот пример использования:
public static void main(String[] args) {
int uint = Integer.parseUnsignedInt("4294967295");
System.out.println(uint); // -1
System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}
В качестве дополнения, если длина 64 бита не соответствует вашим требованиям, попробуйте java.math.BigInteger .
Это подходит для ситуаций, когда число выходит за рамки диапазона 64 бит.
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);
}
Результат:
Сумма: 18446744073709551614
Разница составляет: -18446744073709551615
Изделие: -85070591730234615856620279821087277056
Частное: 1
public static final int SIZE = 32;начиная с Java 1.5.