2013-03-15 13 views
1

Я боролся с тем, что походит на простые понятия, но я, кажется, продолжаю комбинировать и смешивать двоичные преобразования.Меняет ли знак-бит при использовании одного или двух дополнений?

Если вам дано число в двоичном формате и примените дополнение 1, вы инвертируете все биты. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Для дополнения 2 вы инвертируете бит как с дополнением 1 и добавьте 1.

Означает ли это, что вы буквально инвертируете все биты? По какой-то причине я продолжаю думать, что все биты должны быть инвертированы, за исключением самого большого бита (знакового бита). Вот несколько примеров. Может кто-нибудь, пожалуйста, скажите мне, правильно ли я делаю это?

1 в комп: 0010110

2 в комп: 0010111


1 в комп: 10001010

2 в комп: 10001011


1 в комп: 100001001

2 в комп: 100001011


Спасибо.

ответ

1

Ваших понятий совершенно правильно:

  • поразрядное дополнение = инвертировать все, что
  • двоичного дополнения = инвертировать все, включая левый бит, затем добавьте 1

Вашего первого два примера верны, последний немного странный, поскольку вы обычно работаете с кратными байтами (8 бит), а ваш пример имеет 9 бит, но все же применяются те же правила:

 (0000000)011110110 
ones -> (1111111)100001001 
twos -> (1111111)100001010 <-- I think you had a typo here, you stated the result would be 100001011 

Вот хорошее резюме статья на эту тему: http://academic.evergreen.edu/projects/biophysics/technotes/program/2s_comp.htm