Двоичная и шестнадцатеричная системы

Урок объясняет, почему процессор живёт в двоичной системе, а программисты пишут в шестнадцатеричной.

Бит — один разряд двоичного числа (0 или 1); восемь бит образуют байт.

Почему всё в двоичном виде

Внутри процессора есть только два устойчивых состояния: есть напряжение или нет. Поэтому естественная система счисления для машины — двоичная: каждый разряд это 0 или 1. Число 1011 в двоичном виде — это 8 + 0 + 2 + 1 = 11.

ДвоичноеДесятичное
00011
00102
01004
10008
101111

Зачем нужен шестнадцатеричный

Длинные двоичные числа тяжело читать: 11110000 легко спутать. Шестнадцатеричная система (основание 16, цифры 0–9 и A–F) удобна тем, что одна hex-цифра ровно равна четырём битам. Поэтому байт всегда записывается двумя hex-цифрами:

  двоичное  1111 0000
  hex          F    0   ->  0xF0
  десятичное          240

В ассемблере hex пишут с префиксом 0x (mov rax, 0xFF) — так короче и нагляднее видно границы байтов.

Как работает под капотом

Python умеет переводить числа между системами штатно — проверим соответствия:

n = 0b1011        # двоичный литерал = 11
print("число:", n)
print("в hex:", hex(n))
print("в bin:", bin(0xF0))
print("0xFF =", 0xFF)

Вывод:

число: 11
в hex: 0xb
в bin: 0b11110000
0xFF = 255

Один байт хранит значения от 0 до 255 (это 2 в степени 8 минус 1). Два байта — до 65535, восемь байт (как в rax) — гигантский диапазон до 18 с лишним квинтиллионов. Понимание степеней двойки — основа всей низкоуровневой работы.

Частые ошибки

  • Считать, что 0xFF это 16. Нет: 0xFF = 15·16 + 15 = 255. F — это 15.
  • Путать количество бит и максимум значения. 8 бит дают 256 разных значений (0…255), а не 8 и не 128.
  • Забывать префикс системы. 10 в десятичном это десять, 0b10 это два, 0x10 это шестнадцать.

Итог

  • Процессор работает в двоичной системе: бит — 0 или 1, байт — 8 бит.
  • Шестнадцатеричная запись компактна: одна цифра = 4 бита, байт = две цифры.
  • Один байт хранит значения 0…255 (2 в степени 8).
  • В ассемблере hex пишут с префиксом 0x.
Проверьте себя
1. Сколько бит кодирует одна шестнадцатеричная цифра?
A2
B4
C8
D16
2. Чему равно 0xFF в десятичной системе?
A16
B100
C255
D256
3. Сколько различных значений хранит один байт?
A8
B128
C256
D255