Вопрос, связанный с диапазоном примитивных типов данных - PullRequest
0 голосов
/ 17 ноября 2018

В java у короткого диапазона есть диапазон от -128 до 127. Почему это не от -127 до 127? Учитывая, что один бит используется для хранения знака числа, отрицательный предел должен был составлять -127, что составляет сумму 2 ^ 6 + 2 ^ 5 + 2 ^ 4 + 2 ^ 3 + 2 ^ 2 + 2 ^ 1 + 2 ^ 0? Чего мне не хватает в моих расчетах?

Ответы [ 3 ]

0 голосов
/ 17 ноября 2018

Полагаю, вы имели в виду byte, а не short, поскольку short имеет диапазон от -32768 до 32767.

Похоже, что для целочисленных типов (включаяshort), отрицательное число представляется битом со знаком, а остальное число - как обычно.Таким образом, -1 будет представлено как 1000.0001 (точка добавлена ​​для удобства чтения).Это, однако, неверно.

В действительности, -1 представляется как 1111.1111, а 1000.0000 на самом деле -128 (а не -0, который не существует для этого типа).Это сделано для того, чтобы поддерживать арифметику одинаковой для всех значений.

0 голосов
/ 17 ноября 2018

Вы используете 8-битные данные, чтобы сохранить их в памяти компьютера. Это просто от 0 до 255. Учитывая, что вам также нужны отрицательные числа, вы должны изменить способ просмотра этих чисел.

Допустим, мы берем 8-й бит в качестве индикатора негатива. Отрицательное число будет отрицанием положительного числа. Это позволило бы отображать числа от -127 до 127, но было бы два способа отобразить 0: 1111, 1111 и 0000 0000. Это называется дополнением.

Поскольку инженеры хотели использовать все доступное пространство, возникла новая идея. Чтобы преобразовать номер позиции в отрицательное значение (* - 1), они решили полностью отменить число и увеличить его на единицу. Это дало бы им возможность использовать весь диапазон 256. Это дополнение к двум. Есть 128 отрицательных чисел + 1 ноль + 127 положительных чисел, что составляет 256 чисел.

0 голосов
/ 17 ноября 2018

Ваши расчеты неверны.Всего возможностей 2 ^ 8, и это равно 256. От -128 до 127, потому что мы считаем 0 одним из этих чисел.128 + 128 = 256. Но 256 + '0' = 257. Таким образом, оно должно быть от -128 до 127.

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