Является ли 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
}