Как превратить шестнадцатеричное в десятичное с помощью мозга? - PullRequest
21 голосов
/ 26 мая 2009

Мне кажется раздражающим открытие калькулятора для таких крошечных вещей, и я твердо верю в то, что слова "чем больше знаешь, тем лучше!" поэтому здесь я спрашиваю вас, как преобразовать шестнадцатеричное в десятичное.

До этого момента я использовал следующую формулу:

Hex:        Decimal:
12          12+6
22          22+2*6
34          34+3*6
49          49+4*6
99          99+9*6

Я запутываюсь, когда перехожу на более высокие цифры, такие как C0 или FB

Какую формулу (мозг, не функционал) вы используете?

Ответы [ 7 ]

37 голосов
/ 26 мая 2009

Если вы считаете, что шестнадцатеричное - это основание 16, на самом деле это довольно просто:

Начните с наименее значащей цифры и двигайтесь к самой значимой (справа налево) и умножьте цифру с возрастающей степенью 16, затем сложите результат.

Например:

0x12 = 2 + (1 * 16) = 18

0x99 = 9 + (9 * 16) = 153

Тогда помните, что A = 10, B = 11, C = 12, D = 13, E = 14 и F = 15

Итак,

0xFB = 11 + (15 * 16) = 251

15 голосов
/ 26 мая 2009

Это не формула ... это даже не похоже на формулу ...

Формула:

X * 16 ^ y где X - это число, которое вы хотите преобразовать, а y - это позиция для числа (справа налево).

Итак .. если вы хотите преобразовать DA145 в десятичное значение будет ..

(5 * 16 ^ 0) + (4 * 16 ^ 1) + (1 * 16 ^ 2) + (10 * 16 ^ 3) + (13 * 16 ^ 4)

И вы должны помнить, что буквы:
A - 10
B - 11
С - 12
Д - 13
E - 14
F - 15

9 голосов
/ 26 мая 2009

Я почти прекратил это делать, когда обнаружил, что шестнадцатеричные числа, с которыми я работал, были 32-битными. Не очень весело там.

Для меньших чисел я (в конце концов) запомнил некоторые паттерны: 10 = 16, 20 = 32, 40 = 64, 80 = 128 (потому что 100 = 256, а 80 на один бит меньше). 200 = 512 Я помню из-за какой-то машины, которую я использовал, размер страницы которой был 512 (больше не помню, какая машина!). 1000 = 4096, потому что это размер страницы другой машины.

также, 64 = 100, 32 = 50, B8 = 200

Вот и все. Кроме того, я добавляю.

7 голосов
/ 26 мая 2009

Для справки, ваш мозг использует функциональный метод поиска ответа. Вот функция, которую мой мозг использует для нахождения значения шестнадцатеричного числа:

  1. Разделите шестнадцатеричное число на отдельные цифры.
  2. Преобразовать каждую цифру в десятичное значение (так что 0-9 остаются прежними, A равно 10, B равно 11 и т. Д.)
  3. Начиная с крайней правой цифры, умножьте каждое значение на 16 ^ X power, где X - это расстояние от крайней правой цифры (поэтому самая правая цифра - 16 ^ 0 или 1, следующая - 16 ^ 1, или 16, следующая равно 16 ^ 2 или 256 и т. д.)
  4. Добавьте все значения вместе.
3 голосов
/ 04 сентября 2009

Запомните десятичные значения от 20h, 40h и т. Д. До E0h. (Я полагаю, вы уже знаете 100h.) Затем получите десятичные значения, если другие числа, добавляя или вычитая число от 1 до 16.

2 голосов
/ 11 ноября 2011

Десятичное значение будет

20h = 0x16^0 + 2x16^1 = 0x1 + 2x16 = 0 + 32 = 32

в десятичной записи или (32)10.

Для 40h в гексе у нас будет 64 в десятичном виде, для EOH у нас будет 224 в десятичном виде.

1 голос
/ 23 марта 2016

При определении десятичного значения определенного индекса в слове, обобщенного для всех оснований:

b^i*n

где b - основание, i - индекс в слове, а n - числовое значение в индексе. Запомните это, помня, что b, i, n = bin = сокращение от двоичного.

Примеры:


для base2 (двоичный файл) 1 000, получение значения, где находится 1:

b = основание, то есть base2: b = 2

i = основанный на 0 индекс в слове, т.е. 1000, 1 в 3-м индексе, i = 3

n = число, указанное в индексе, т.е. 1000, 3-й индекс равен 1, n = 1

т., 2 ^ 3 * 1 = 8


для base10 (десятичное число) 9 00, получение значения, в котором находится 9:

b = 10, i = 2, n = 9: 10 ^ 2 * 9 = 100 * 9 = 900


для base16 (шестнадцатеричный) 0x0 f 0, получая значение, где находится f:

b = 16, i = 1, n = 15 (0-9, a-f, f = 15): 16 ^ 1 * 15 = 16 * 15 = 240


Обратите внимание, что это можно использовать для определения значения каждого индекса в слове, тогда каждое значение можно суммировать для определения значения полного слова.

например. 1001, слева направо (порядок не имеет значения в сумме):

(2 ^ 3 * 1 = 8) + (2 ^ 2 * 0 = 0) + (2 ^ 1 * 0 = 0) + (2 ^ 0 * 1 = 1) = 9

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