Инструменты пользователя

Инструменты сайта


// hex ↔ bin в уме

Однажды писал про двоичные литералы в GCC: 0b00100100, новый стандарт C++14 закрепил их в C++.

Но тут я хотел бы рассмотреть лёгкий способ перехода в уме между hex и bin представлениями.

Переводить, на самом деле, не просто, а очень просто. Достаточно запомнить таблицу представления от 0 до F, а дальше переходить от hex в bin и обратно как два пальца об асфальт: каждая hex цифра - это 4 бита в bin.

Для примера, таблица:
0 - 0000
1 - 0001
2 - 0010
3 - 0011

4 - 0100
5 - 0101
6 - 0110
7 - 0111

8 - 1000
9 - 1001
A - 1010
B - 1011

C - 1100
D - 1101
E - 1110
F - 1111

Ну и взять число: 110110110B

Разделим на группы по 4 бита, недостающие (слева) добьём нулями:

110110110B → 1 1011 0110B → 0001 1011 0110

0001b = 1h 1011b = Bh 0110b = 6h

т.е. имеем 0x1B6

Причём в таблице, если разделить её на 4 части, то в бинарном виде первый два бита - это номер части от 0 (00b) до 3 (11b) и запомнить, по сути, нужно только числа от 0 до 3 в бинарном виде. К примеру:

1010b = 1000b + 0010b 
  10b = 2h ⇒ 1000b = 2h * 4 = 8h
1000b + 0010b = 8h + 2h = Ah

или: 1101b

1101b = 1100b + 0001b
  11b = 3 ⇒ 1100b = 3 * 4 = 12 = Ch
1100b + 0001b = 11b * 4 + 01b = Ch + 1h = Dh

Ну или в более общем виде:

XXYYb = XXb * 4 + YYb

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

Комментарии