Представляя 8-разрядное целое число со знаком? - PullRequest
1 голос
/ 08 октября 2010

ЕСЛИ базовый шестнадцатеричный F6 является 8-разрядным целым числом со знаком, сколько он представляет в десятичном виде?

Ответы [ 5 ]

6 голосов
/ 08 октября 2010

F6 - это двоичное значение 11110110.

В системе дополнения Two первый бит используется для обозначения знака.Если это 0, оставшиеся 7 цифр представляют 0-127.Если это 1, то вы используете поразрядно, чтобы не переворачивать остальные 7 битов, затем добавляете 1 и отрицаете результат.

Итак:

11110110 // Negative, because the first position is 1
1110110 // Removed the leading 1
0001001 // Flip the remaining 7 bits
8 + 1 // Convert bits to decimal values (bits 4 and 1 from the right)
9 + 1 = 10 // Add the 1

Следовательно, F6 равно -10.

5 голосов
/ 08 октября 2010

Если допустить «нормальное» дополнение 2, это -10. В дополнении 1 было бы -11. По знаковой величине это будет -118.

2 голосов
/ 08 октября 2010

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

11011011
= 1*(2^7)+1*(2^6)+0*(2^5)+1*(2^4)+1*(2^3)+0*(2^2)+1*(2^1)+1*(2^0) = 219

С комплиментом 2-х ...

11011011
= -1*(2^7)+1*(2^6)+0*(2^5)+1*(2^4)+1*(2^3)+0*(2^2)+1*(2^1)+1*(2^0) = -37
  ^ Note the negative

Первый бит считается отрицательным, в 8-битном это означает 2 ^ 7, если установлено отрицательное, а остальное добавляется к отрицательному, чтобы сделать его менее отрицательным. Если все биты равны 1, то это будет -1.

1 голос
/ 08 октября 2010

Ответ -10.

0 голосов
/ 08 октября 2010

Еще один способ думать о двух дополнительных числах.Добавление или удаление 2-х степенного числа битов ничего не меняет.Тогда для любого числа x: x = x + 256 = x - 256 (или x + n * 256 для любого n).

Теперь, когда вы получаете число, вы должны следовать некоторому соглашению, чтобы выяснитьпрямо п.Соглашение для дополнения 2 просто: если старший значащий бит равен 1, то это отрицательное число (n = -1), если 0, то это положительное число (n = 0).

Практически вы просто конвертируетех это десятичное значение.

F6 = 15 * 16 + 6 = 246.

Если значение больше 128 (десятичное значение старшего значащего бита), вы удалите 256.

F6 = -10, как другие также нашли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...