2s Дополнение к отрицательному нулю

У меня проблема: вы знаете дополнение 2s, поэтому вы можете получить отрицательное число положительного с обратным и добавлением единицы. например

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

поэтому я думаю, что я что-то неправильно понял


person ThePom    schedule 19.05.2014    source источник
comment
Дополнение до 2 обычно используется для чисел с фиксированной шириной. В противном случае, как узнать, когда нужно прекратить инвертирование битов на первом этапе? И как узнать, какой бит самый старший?   -  person awksp    schedule 20.05.2014
comment
1111 1111 + 0000 0001 в 8 битах 0000 0000 девятый бит потерян, потому что от него нет места   -  person Serpiton    schedule 20.05.2014
comment
@ user3580294 Я думаю, что `` 8 бит '' говорит о ширине, которую вы правы, в противном случае ... он также должен останавливаться или нет, потому что вы не учитываете следующий 00 или нет   -  person ThePom    schedule 20.05.2014
comment
@Serpiton, так что это 2s дополнение отрицательного числа положительное или ... или это s2s дополнение к -0- ›-0?   -  person ThePom    schedule 20.05.2014


Ответы (2)


1 0000 0000b - 256, а не 512. Усеченный до 8 бит, это 0.

Это потому, что с дополнением до двух ноль равен нулю. Нет ни положительного, ни отрицательного нуля.

Сравните это с битом дополнения или знака, где положительный ноль и отрицательный ноль - разные значения.

person that other guy    schedule 19.05.2014
comment
так что двойное дополнение -0 - ›0? - person ThePom; 20.05.2014
comment
Я имею в виду -0 = 1000 4 бит и 1000 0000 8 бит - person ThePom; 20.05.2014
comment
Нет, -0 0000 4-битный и 0000 0000 8-битный, как и +0. Дополнение до двух не различается. - person that other guy; 20.05.2014

Чтобы расширить мой предыдущий комментарий к вопросу

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 -> -)

person Serpiton    schedule 19.05.2014