Отрицательные числа занимают больше памяти?
Итак, у меня есть эта тестовая программа, которая проверяет двоичное значение целого числа, одно положительное, а другое отрицательное.
int i = 100;
int i2 = -100;
System.out.println(Integer.toBinaryString(i));
System.out.println(Integer.toBinaryString(i2));
результат:
1100100
11111111111111111111111110011100
Как вы могли видеть, отрицательное число имеет больше бит, чем положительное число, означает ли это, что отрицательное число занимает больше памяти, чем положительное число?
4 ответа
Нет, это то, как оно представляется внутренне, с положительным числом у него такое же количество бит для представления значения int
это просто избегание ведущих нулей
Нет, оба являются 32-битными величинами - ширина целого числа фиксирована на данной платформе. Это "короче", потому что оно усекает все ведущие 0.
Возможно, вы захотите прочесть о целочисленном представлении, в частности, представлении дополнения до двух.
Нет, не будет. Максимальный нижний и верхний предел для целого числа (int) в Java составляет от -2 147 483 648 до 2 147 483 647. Помните, что int занимает 4 байта (32 бита).
Давайте поместим это в двоичный файл сейчас.. Это:
1111111 11111111 11111111 11111111
7 bits 8 bits 8 bits 8 bits
Всего это 31 бит (в первом столбце всего 7 бит). Оставшийся один бит является битом знака - бит знака обозначает знак. Если установлено (т.е. 1), оно отрицательное, если нет - положительное.
Так что для положительного числа (макс) это будет
01111111 11111111 11111111 11111111
и для негатива это будет
11111111 11111111 11111111 11111111
Таким образом, размеры будут одинаковыми.
Такие языки, как C,C++ и C# - поддерживают целые числа без знака (uint), которые также являются 32-битными и имеют диапазон от 0 до 4 294 967 295. Он отбрасывает бит знака и считает его в.
Нет. Номера потребляют одинаковое количество бит внутри, когда вы звонили toBinaryString()
это удалило ведущие нули. В соответствии с Javadoc,
Это значение преобразуется в строку цифр ASCII в двоичном формате (основание 2) без дополнительных начальных 0.
Наконец, вы можете проверить Integer.SIZE,
System.out.println(Integer.SIZE);
Выход
32
Потому что Java int
32-битный