Проблемы с пониманием упражнения, учитывая дополнение до двух в шестнадцатеричном формате для преобразования в десятичный формат

Я пытаюсь преобразовать два дополнения следующих шестнадцатеричных значений в их десятичные значения:

23, 57, 94 и 87.

a) 23

Процедура: (3 x 16 ^ 0) + (2 x 16 ^ 1) -> (3) + (32) = 35 (верно)

b) 57

Процедура: (7 x 16 ^ 0) + (5 x 16 ^ 1) -> (7) + (80) = 87 (верно)

Для 94 и 87 правильные значения -108 и -121 соответственно.

Если я буду следовать процедуре, которую я использовал для чисел а) и б), я получу 148 и 128 для 94 и 87.

Может кто-нибудь объяснить мне, как мне получить правильные результаты, поскольку мои неверны? Нужно ли сначала преобразовать байт в двоичный файл, а затем продолжить оттуда?

Заранее большое спасибо!


person idelara    schedule 17.09.2014    source источник


Ответы (2)


0x94 = 0b10010100

теперь вы можете преобразовать его в десятичное число, как обычное двоичное число, за исключением того, что MSB считается отрицательным:

1 * -2^7 + 0 * 2^6 + 0 * 2^5 + 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 =
-2^7 + 2^4 + 2^2 =
-128 + 16 + 4 =
-108

другой номер работает аналогично

person mch    schedule 17.09.2014

Сначала запишите двоичное представление шестнадцатеричного значения:

94h = 10010100b

Чтобы получить дополнение до двух, вы переворачиваете все биты и добавляете 00000001b, так что дополнение до двух этой двоичной строки равно

01101011b + 00000001b = 01101100b

Тогда первый бит интерпретируется как знак (в данном случае минус), а остальные 7 бит составляют величину, поэтому:

01101100b = -108d

Другой работает аналогично.

person karakusc    schedule 17.09.2014