Является ли Java int всегда 32-битным? - PullRequest
76 голосов
/ 23 июня 2009

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

Ответы [ 4 ]

117 голосов
/ 23 июня 2009

Да, это определено в Спецификация языка 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 включительно
  • Для символа, от '\ u0000' до '\ uffff' включительно, то есть от 0 до 65535
7 голосов
/ 23 июня 2009

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

4 голосов
/ 17 февраля 2016

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

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

  • сравнить без знака (int x, int y)
  • divUnsigned (int divnd, int divisor)
  • parseUnsignedInt (String s)
  • parseUnsignedInt (String s, int radix)
  • remainderUnsigned (int divnd, int divisor)
  • to UnsignedLong (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
}
3 голосов
/ 04 июля 2016

Дополнительно, если длина 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...