Понимание дополнений до двух

Итак, насколько я понимаю, 0 и 1 служат знаком плюс или минус в числе. Если у меня есть число, такое как 10101 в двоичном формате (21 в десятичном), как оно преобразуется в отрицательное? Получается ли 10101 + 00001 = 10111? Или он добавлен на передний план?

Кроме того, пытаясь понять это, что, если вы пытаетесь получить число, скажем, в девятибитном дополнении до двух? Будет ли писать это в девятибитном формате 000010101 для 21, а затем добавлять единицу впереди?

Я ходил туда и обратно, но не могу понять.


person Kenneth    schedule 19.09.2014    source источник
comment
В комплименте 2 MSB не является знаковым битом   -  person Sanketssj5    schedule 21.02.2015


Ответы (2)


Чтобы инвертировать знак числа в дополнении до двух, вы инвертируете его биты и добавляете единицу. Количество бит не имеет большого значения. «Добавить единицу» означает буквально выполнить сложение, а не добавлять 1 к числу или менять местами 0 на 1.

Итак, для числа 21 с девятью битами:

21       = 000010101;
inverted = 111101010;
plus 1   = 111101011;

Для 22 с девятью битами:

22       = 000010110;
inverted = 111101001;
plus 1   = 111101010;
person Cory Nelson    schedule 19.09.2014

Я всегда представляю два дополнения как одометр. Если (4-значный) одометр показывает 0000, и вы проедете свой автомобиль назад на один км, то одометр покажет 9999. Таким образом, 9999 соответствует 1 км назад, или -1 км.

Если вы добавите 1 км к этому числу, вы получите 10000. Но поскольку у вас всего четыре цифры, вы получите 0000. Таким образом, -1 км + 1 км действительно дает 0 км.

Вам все еще нужен способ различить, является ли 9999 9999 км вперед или 1 км назад. Это просто вопрос соглашения. Вы можете сказать, что все, что начинается с 5 или выше, считается отрицательным расстоянием. Это не имеет большого значения для вычислений, потому что 9999 + 0001 = 0000 независимо от того, произошло ли 9999 на 9999 км вперед или на 1 км назад. Однако это имеет значение, если вы хотите отобразить 9999 как -1 км.

Дополнение до двух - это та же идея для двоичных чисел.

person Martin Drautzburg    schedule 15.11.2015