Подтвердить что ты не робот

Почему диапазон подписанного байта составляет от -128 до 127 (2 дополнения), а не от -127 до 127?

Я читаю Почему диапазон байтов от -128 до 127 в Java? он говорит

128 - 10000000. Перевернуто, оно 01111111, и добавление получает 10000000 снова

поэтому он заключает -128 - 10000000

поэтому +128 не может быть представлен в 2 дополнениях в 8 бит, но это означает, что мы можем представить его в 9 бит, так что 128 - 010000000, и поэтому его 2-бит -128 составляет 110000000,

так это представление -128 10000000 или 110000000? Является ли регистр представления зависимым?

Почему бы просто не сделать нижний диапазон -127 fot 8 бит вместо записи -128 как 10000000?

4b9b3361

Ответ 1

Почему диапазон байтов без знака от -128 до 127?

Это не так. Беззнаковый байт (предположим, 8 бит) составляет от 0 до 255.

Диапазон подписанного байта с использованием 2 дополнений от -128 до 127, непосредственно из определения 2 дополнение:

01111111 = +127
01111110 = +126
01111101 = +125
...
00000001 = +1
00000000 =  0
11111111 = -1
...
10000010 = -126
10000001 = -127
10000000 = -128

так это представление -128 10000000 или 110000000?

В 8-битном, это 10000000, в гипотетическом 9-битном представлении это 110000000.

Почему бы просто не сделать нижний диапазон -127 для 8 бит?

Искусственное ограничение диапазона до -127 не будет достигнуто очень; вы бы отказались от абсолютно правильного значения и, как правило, делали код более сложным (что еще вы сделали бы с битовой диаграммой 10000000?).

Ответ 2

так это представление -128 10000000 или 110000000? Является ли регистр представления зависимым?

Да, представление с двумя дополнениями зависит от бит

Почему бы просто не сделать нижний диапазон -127 fot 8 бит вместо записи -128 как 10000000

2 ^ 8 = 256. Таким образом, любая схема представления, которую вы используете, должна иметь возможность представлять 256 различных значений.

И вы можете нарисовать круг, чтобы понять, насколько хороша 2 системы дополнений.

Сначала посмотрите на эту таблицу:

Bits    Unsigned 2 complement
00000000    0   0
00000001    1   1
00000010    2   2
01111110    126     126
01111111    127     127
10000000    128     −128
10000001    129     −127
10000010    130     −126
11111110    254     −2
11111111    255     −1

для системы с двумя дополнениями вы можете нарисовать круг для понимания этой системы.

Вот 4-битная версия. Вы можете легко разработать 8-битную версию для себя. Этот круг представляет собой то, что на самом деле представляет собой эта система с двумя дополнениями. Его круговая система. Это означает, что его представление зависит от "диапазона", который вы ему даете. поэтому 8-битная версия отрицательного числа будет отличаться 16-разрядной версией того же отрицательного числа. вы можете сравнить такое же отрицательное число в 4-битной версии, указанную в круге с 8-битной версией, приведенной в таблице.

                      0000  0
                 1111  -1     0001  1


        1110  -2                       0010  2




  1101  -3                                   0011  3



1100  -4                                       0100  4



  1011  -5                                   0101  5




        1010  -6                       0110  6


                 1001  -7     0111  7
                          1000  -8

На стороне примечания 2 арифметики дополнений хорошо справляются с "фиксированными" вычислениями вычисления ширины в компьютерах (регистры, память и т.д.).

В компьютерах первого поколения существовала тенденция обеспечивать собственную десятичную арифметику. Но это было быстро отменено в пользу "дополненной" или "круговой" схемы, потому что десятичная арифметика является странной с компьютерной точки зрения. Мы считаем это естественным, потому что "у нас 10 пальцев". Эти пальцы были нашим ранним инструментом вычисления. вот почему мы находим десятичную систему настолько естественной. его встроенный в наши гены.

Ответ 3

Альтернативы двух дополнений были бы

  • один дополнительный вариант, который имеет проблемы из-за его "отрицательного нуля"
  • знак/величина, который также имеет отрицательный нуль
  • не присваивать значение 10000000, и в этом случае многие функции, которые принимают подписанные 8-битные целые числа, должны будут проверять это недопустимое значение, теряя время. (Если ваш код не работает на гипотетическом аппаратном обеспечении, которое рассматривает этот битовый шаблон как целое NaN.)

Легче просто присвоить значение этой битовой схеме, а естественное значение в представлении двух дополнений - -128.

Например, в двух дополнениях проверяем, является ли отрицательное число монтировок проверкой, установлен ли его старший бит. В варианте, где 10000000 недействителен, он (псевдокод)

if (highest_bit_zero(x))
    return false;
else if (x == 0b10000000)
    ERROR
else
    return true;

Вы решаете, как обращаться с ошибкой:)

Ответ 4

так это представление -128 10000000 или 110000000? Является ли регистр представления зависимым?

В 9-битном мире это будет 110000000. В 16-битном мире это будет 1111111110000000. По крайней мере, пока мы говорим о двух дополнениях.

Почему бы просто не сделать нижний диапазон -127 для 8 бит вместо записи -128 как 10000000?

Как отмечали larsmans, вы получили бы "недопустимое" значение, с которым вам постоянно приходилось проверять. Было выбрано два дополнения, так как для ALU так легко справиться. Подобно тому, как ширина байтов выбрана так, чтобы быть силовой (что тоже не всегда было). На аппаратном уровне добавление двух дополнений идентично неподписанному, поэтому никаких специальных инструкций или дополнительного оборудования не требуется (в отличие от одного дополнения).

С тем, как они выглядят, все значения с наивысшим набором бит отрицательны, все значения с наивысшим разрядом не являются неотрицательными (положительными или нулевыми). Легко, не так ли? Отрицательный диапазон, превышающий положительный диапазон, является просто артефактом, который пытается сохранить два дополнения просто.

Ответ 5

Причина того, почему у вас не может быть диапазон от введите описание изображения здесь to введите описание изображения здесь.

Похоже, введите описание изображения здесь и введите описание изображения здесь представлены одним и тем же шаблоном. Это не хорошо. Целое число, отличное от нуля, и его отрицательное значение не могут быть представлены одним и тем же шаблоном. Поэтому ввести описание изображения здесь не может быть представлено в восьми битах. Максимальное положительное целое число, которое может быть представлено в восьми битах, введите описание изображения здесь.

Какое количество представлено 1000 0000? Добавьте представление введите здесь описание изображения:

введите описание изображения здесь

Хороший выбор? введите описание изображения здесь. Поэтому 1000 0000 представляет введите описание изображения здесь. Восемь бит могут использоваться для представления чисел введите описание изображения здесь... 0... введите описание изображения здесь.

введите описание изображения здесь

Например, диапазон целых чисел, который может быть представлен в восьми битах с использованием двух дополнений:

Пример

Обратите внимание, что еще одно отрицательное целое число может быть представлено, чем целые положительные числа.

Источник: - http://programmedlessons.org/AssemblyTutorial/Chapter-08/ass08_20.html