Чи завжди Java int 32 біти?


82

Чи intзавжди та скрізь Java буде 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

8

ints - це 32 біти. Якщо вам потрібно більше, longце 64 біти.


7

Java 8 додала певну підтримку цілих чисел без підпису. Примітив intвсе ще підписаний, проте деякі методи інтерпретуватимуть їх як беззнакові.

Наступні методи були додані до класу Integer у Java 8:

  • compareUnsigned (int x, int y)
  • divideUnsigned (int dividend, int divisor)
  • parseUnsignedInt (Рядки)
  • parseUnsignedInt (Рядок s, int radix)
  • remainderUnsigned (int dividend, 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
}

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.