Всегда ли Java int 32 бита?

82

Будет ли Java intвсегда и везде 32-битным целым числом со знаком?

никель
источник
Число битов, используемых для представления значения int, - это константа Integer.SIZE, которая указывается как public static final int SIZE = 32;начиная с Java 1.5.
burnabyRails

Ответы:

122

Да, это определено в спецификации языка 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
Coobird
источник
8

ints - 32 бита. Если вам нужно больше, longэто 64 бита.

drRoflol
источник
7

В Java 8 добавлена ​​поддержка беззнаковых целых чисел. int по-прежнему подписан, однако некоторые методы интерпретируют их как беззнаковые.

Следующие методы были добавлены к классу Integer в Java 8:

  • compareUnsigned (интервал x, интервал y)
  • DivideUnsigned (целое делимое, целое делимое)
  • parseUnsignedInt (String s)
  • parseUnsignedInt (строка s, целое число)
  • остаток без знака (целое делимое, целое делимое)
  • toUnsignedLong (целое число x)
  • toUnsignedString (целое число)
  • toUnsignedString (целое число, основание целого числа)

Вот пример использования:

public static void main(String[] args) {
    int uint = Integer.parseUnsignedInt("4294967295");
    System.out.println(uint); // -1
    System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}
Roblovelock
источник
4

В качестве дополнения, если длина 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

Евгений
источник