Чи intзавжди та скрізь Java буде 32-бітовим цілим числом із підписом?
Відповіді:
Так, це визначено в специфікації мови 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
Java 8 додала певну підтримку цілих чисел без підпису. Примітив intвсе ще підписаний, проте деякі методи інтерпретуватимуть їх як беззнакові.
Наступні методи були додані до класу Integer у Java 8:
Ось приклад використання:
public static void main(String[] args) {
int uint = Integer.parseUnsignedInt("4294967295");
System.out.println(uint); // -1
System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}
Додатково, якщо довжина 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
public static final int SIZE = 32;з Java 1.5.