2s Дополнение отрицательного нуля
У меня проблема: вы знаете 2s Complement, так что вы можете получить отрицательное число положительного с обратным и добавив один. например
8 Bit
121 = 0111 1001
1st= 1000 0110
+ 0000 0001
---------
1000 0111 --> -121
Так что теперь, если у нас есть -0
ноль выглядит как 8 бит
0000 0000
поэтому минус 0 должен выглядеть
1111 1111 + 0000 0001
= 10000 0000
но это 512
так что я думаю, что я что-то неправильно понял
2 ответа
1 0000 0000b
256, а не 512. Сокращено до 8 бит, это 0.
Это потому, что с дополнением до двух ноль равен нулю. Нет положительного или отрицательного нуля.
Сравните это со своим дополнением или знаковым битом, где положительный ноль и отрицательный ноль - это разные значения.
Чтобы расширить мой предыдущий комментарий к вопросу
1111 1111 + 0000 0001
в 8 битах есть 0000 0000
девятый бит теряется, потому что от него нет места.
И, да, дополнение отрицательное является положительным
-121 = 1000 0111
1st = 0111 1000
+ 0000 0001
---------
0111 1001 --> 121
Думайте о них как о круге, в одной точке есть 0, добавляя 1 за раз, когда вы поднимаетесь к противоположной точке (128 в 8 битах), в этот момент знак переключается, и абсолютное значение начинает уменьшаться, например: 128 + 1 = -127
, поскольку вы продолжаете добавлять 1, значение возвращается к 0, и круг завершается.
Поэтому, учитывая количество бит, у вас есть только этот бит, не более, и если вы хотите, чтобы значение было подписано, у вас действительно есть только бит x-1 для значения, так как самый старший бит используется для знака (0 -> +; 1 -> -)