Hatred's Log Place

DON'T PANIC!

Aug 20, 2014 - 2 minute read - Comments - programming

hex ↔ bin в уме

Однажды писал про двоичные литералы в GCC: /post/2009-10-02_13.44_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бит число в уме не совсем получится переводить, но последовательно записывая его на бумажке - вполне себе можно.