Как сделать эту проблему шестнадцатеричного вычитания? - PullRequest
0 голосов
/ 13 января 2019

Я практикую шестнадцатеричное вычитание и, похоже, застрял в этой проблеме:

0B - 74

Может кто-нибудь объяснить, как выполнить этот расчет? Шестнадцатеричный ответ -69, но я не могу понять, почему. Должен ли я попытаться преобразовать в двоичное или базовое число 10, чтобы помочь мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

0x0B - 0x74 = 0x0B + (-0x74), как мы знаем из начальной школы.

дополнение к двойке говорит нам, что

-0x74 = (~ 0x74) + 1.

так что процессор решает это так:

          1
   00001011
+  10001011
============

закончите заполнять его, как в начальной школе, но проще, чем в базе 2.

  000010111
   00001011
+  10001011
============
   10010111

перенос и перенос совпадения мсбит, поэтому ответ подходит. 0x97, который - (0x68 + 1) = -0x69.

Также обратите внимание, что если бы это было 0x00B - 0x074, оно все еще работает

              1
   000000001011
+  111110001011
===============

результат 0xF97, который равен -0x069. красота двойного дополнения.

(для отрицания числа в двух дополняют один способ сделать это инвертировать (дополняют) и добавить один)

вам вообще не нужно конвертировать базы, вы можете делать математику с базовым 16 так же легко, как базовые 10 или 2. Если мы хотим вычесть числа из начальной школы, мы должны взять наибольшее из меньшего

  74
- 0B
======

b больше 4, поэтому мы должны заимствовать

   1
  64
- 0B
======
   9

0x14 - b = 0x9.

   1
  64
- 0B
======
  69

0x6 - 0x0 = 0x6.

потому что мы должны были перевернуть числа, потому что 0x74 больше, чем 0x0b, тогда мы отрицаем результат -0x69.

Без магии. элементарная математика.

0 голосов
/ 13 января 2019

0x0B - 0x74 = 11 - 116 = -105 (-0x69)

В десятичном виде 11-116 второе значение больше, так что вместо этого я делаю в своей голове - (116-11) переключение значений = - (105) = -105.

В гекса вы можете сделать то же самое - (0x74 - 0x0B), теперь для первой (наименее значимой) цифры 0x4 - 0xB снова слишком много, поэтому заимствуйте один => 0x14-0x0B (20-11) = 9 (один найденная цифра). Теперь вторые цифры: 0x7 - 0x0 - заем = 0x7 - 0x1 = 0x6 => полное значение 0x69 и переворачивание знака ожидает этого результата = -0x69

И для проверки результата:

-0x69 + 0x74 = 0x0B (уведомление -0x9 + 0x4 на самом деле 0xB (11), потому что вы переходите с 4 на 9 "вниз", то есть 3, 2, 1, 0 (-4 сделано), а затем F (!), E, ​​D, C, B (в целом еще -5 = -9). Может быть немного сложно постоянно держать в уме "основание 16", если вы привыкли к десятичному.

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