Будет ли Java int
всегда и везде быть 32-разрядное целое число со знаком?
Является ли Java int всегда 32 битами?
Ответ 1
Да, он определен в Спецификация языка 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
Ответ 2
int
- 32 бита. Если вам нужно больше, long
- 64 бита.
Ответ 3
В качестве дополнительного, если длина 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
Ответ 4
Java 8 добавила некоторую поддержку целых чисел без знака. Примитив int
по-прежнему подписан, однако некоторые методы будут интерпретировать их как unsigned.
Следующие методы были добавлены в класс Integer в Java 8:
- compareUnsigned (int x, int y)
- divideUnsigned (int divend, int divisor)
- parseUnsignedInt (String s)
- parseUnsignedInt (String s, int radix)
- ОстальноеUnsigned (int divend, int divisor)
- toUnsignedLong (int x)
- toUnsignedString (int i)
- toUnsignedString (int i, int radix)
Вот пример использования:
public static void main(String[] args) {
int uint = Integer.parseUnsignedInt("4294967295");
System.out.println(uint); // -1
System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}