Вопрос по двоичному преобразованию в шестнадцатеричный код для подписанных байтов - PullRequest
0 голосов
/ 08 ноября 2010

1) Я понимаю, что при преобразовании двоичного в десятичное число самый левый бит представляет 0, 1 ... и так далее.Так, например, чтобы преобразовать 0001 в десятичную, это 0 * 2 ^ 0 + 0 * 2 ^ 1 + 0 * 2 ^ 2 + 1 * 2 ^ 3, поэтому десятичное значение будет равно 8.

2) Когданапример, вы подписали hex 0x80, который будет преобразован в двоичную 1000 0000, однако, чтобы вычислить десятичное значение для этого двоичного представления, оно подписано, поэтому мы должны инвертировать 7 бит, чтобы мы получили 1111111 и добавили 1, что дает нам 10000000, что-128.

Мой вопрос заключается в том, почему во втором случае, когда мы вычисляем десятичную дробь для подписанного байта, мы должны были начинать с правого большинства битов как 0, поэтому мы имеем ... + 1 * 2 ^8.Почему 2 ^ 0 не самый левый бит, как мы вычислили в 1) для второго случая?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 08 ноября 2010

Нет, обычно двоичный код указывается иначе ... 0001 равен 1, 1000 равен 8.

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

Я отвечаю на пункт 1, не совсем.0001 на самом деле 1, а 1000 - 8.Похоже, вы пришли не с того конца.Например, двоичное число 1101 будет:

+------ 1 * 2^3     =  8
|+----- 1 * 2^2     =  4
||+---- 0 * 2^1     =  0
|||+--- 1 * 2^0     =  1
||||                  --
1101                = 13

. Для пункта 2 самый простой способ превратить битовую комбинацию в число со знаком - сначала превратить его в без знака * 1010.* значение (0x80 = 128), затем вычесть смещение (256 для восьми битов, 65536 для 16 битов и т. д.), чтобы получить -128.

Смещение должно влиять только на вычисления в конце процессаэто способ отображения диапазона от 0..255 до -128..127 или 0..65535 до -32768..32767.

...