Зачем нужна шестнадцатеричная система, если есть двоичная и десятичная?
Постоянно вижу в коде штуки типа #FF8800 или 0x1A2B. Это шестнадцатеричная система. Не понимаю, зачем её вообще придумали — компьютер же в двоичной, а человек в десятичной. Куда тут впихнули ещё и шестнадцать?
2 ответа
Шестнадцатеричная (hex) — это просто компактная запись двоичной, удобная человеку. Фокус в том, что 16 = 2⁴, поэтому ровно 4 двоичных разряда = одна шестнадцатеричная цифра.
Смотри:
1111 1111 (двоичное, 8 знаков)
= FF (hex, 2 знака)
Один байт (8 бит) всегда влезает в 2 hex-цифры — очень удобно. Цифры идут 0–9, а дальше A=10, B=11, C=12, D=13, E=14, F=15.
Именно поэтому цвета пишут как #FF8800: это три байта — красный, зелёный, синий. Писать то же самое в двоичном виде 11111111 10001000 00000000 было бы кошмаром.
Короткое правило, почему НЕ берут, скажем, систему с основанием 10 для этой роли: 10 не степень двойки, и перевод был бы кривой. А 16 (и 8 = 2³) ложатся на двоичную идеально — группируешь биты по 4 (или по 3) и всё. Поэтому в hex так легко «увидеть» биты, не считая в столбик.