Двоичная система счисления — это позиционная система записи чисел с основанием 2, в которой используются всего две цифры: 0 и 1. Каждая позиция (разряд) весит вдвое больше соседней справа, а само значение цифры зависит от того, на каком месте она стоит. Именно так число представляют внутри компьютера.
Содержание
- Двоичная система счисления и бинарный код: в чем разница
- Разряды и вес позиции
- Как перевести число из двоичной системы в десятичную
- Как перевести число из десятичной системы в двоичную
- Бит и байт: сколько значений помещается
- Двоичная арифметика: сложение и умножение на 2
- От числа к бинарному коду символа
- Где это пригодится на практике
- FAQ
- Выводы
Ниже разберу главное для новичка: как перевести число из десятичной системы в двоичную и обратно, что такое разряды и байт, как выполнять двоичную арифметику. Отдельно отделю двоичную систему счисления от бинарного кода — это близкие, но разные вещи, которые часто путают. Все переводы чисел я прогнал кодом, чтобы не ошибиться.
Двоичная система счисления и бинарный код: в чем разница
Эти два понятия стоит развести сразу, потому что их постоянно смешивают.
Двоичная система счисления — это способ записать число цифрами 0 и 1 по правилам позиционной арифметики. Здесь есть вес разряда, перенос, сложение и умножение — все как в привычной десятичной системе, только цифр две, а не десять.
Бинарный код (двоичное кодирование) — это соглашение, которое сопоставляет произвольному объекту (символу, цвету пикселя, команде процессора) некоторый номер, а затем записывает этот номер битами. Арифметического смысла у такого кода обычно нет: биты тут не «складывают», а читают по таблице соответствия.
Связь простая, ее удобно показать цепочкой на одном примере: символ A -> его номер в таблице ASCII (65) -> запись этого номера в двоичной системе (01000001). То есть двоичная система счисления — это инструмент, которым бинарный код записывает уже присвоенные номера. Дальше речь в основном о самой системе счисления, а про области применения кода есть отдельный разбор в смежных темах.
Разряды и вес позиции
Позиционная — значит, что вклад цифры в число зависит от ее места. В двоичной системе крайний правый разряд весит 1, следующий — 2, дальше 4, 8, 16 и так далее: каждый шаг влево удваивает вес. По-другому вес разряда с номером k (счет справа от нуля) равен 2 в степени k.
Возьмем двоичное число 1101 и распишем его по разрядам:
- разряд 0 (справа): 1 весит 1
- разряд 1: 0 весит 2
- разряд 2: 1 весит 4
- разряд 3: 1 весит 8
Складываем веса единиц: 8 + 4 + 0 + 1 = 13. Значит, двоичное 1101 равно десятичному 13. Ту же логику применяют к числу любой длины — просто разрядов больше.
Как перевести число из двоичной системы в десятичную
Алгоритм прямой: умножить каждую цифру на вес ее разряда и сложить результаты. Переведем 1101 обратно в десятичную:
1 · 8 + 1 · 4 + 0 · 2 + 1 · 1 = 8 + 4 + 0 + 1 = 13.
В Python это делает встроенная функция int со вторым аргументом — основанием системы:
print(int('1101', 2)) # разбираем двоичную запись
print(int('11001010', 2)) # число подлиннее
Вывод:
13
202
Функция int('1101', 2) читает строку как число в системе с основанием 2 и возвращает обычное десятичное целое. Проверять переводы так надежнее, чем считать в уме.
Как перевести число из десятичной системы в двоичную
Обратный перевод удобно делать делением на 2 с остатком. Делим число на 2, записываем остаток (0 или 1), результат снова делим на 2 — и так пока не дойдем до нуля. Затем читаем остатки снизу вверх. Разберем на числе 13:
- 13 : 2 = 6, остаток 1
- 6 : 2 = 3, остаток 0
- 3 : 2 = 1, остаток 1
- 1 : 2 = 0, остаток 1
Читаем остатки в обратном порядке (снизу вверх): 1101. Это и есть 13 в двоичной системе. В Python перевод в двоичную запись дает функция bin:
print(bin(13)) # приставка 0b - признак двоичной записи
print(bin(202))
Вывод:
0b1101
0b11001010
Приставка 0b в начале — это пометка Python, что дальше идет двоичная запись, а не десятичное число. Сами цифры после нее — результат перевода.
Бит и байт: сколько значений помещается
Один разряд двоичного числа называют битом (binary digit) — это минимальная единица информации, которая принимает значение 0 или 1. Одного бита мало, поэтому биты группируют.
Байт — это группа из 8 битов. Восемь разрядов дают 2 в степени 8 = 256 разных комбинаций, то есть один байт кодирует числа от 0 до 255 включительно. Этого хватает, например, чтобы задать яркость одного цветового канала пикселя или закодировать символ в однобайтовой кодировке.
Двоичные числа часто выравнивают до фиксированной ширины, дописывая нули слева. Для байта это 8 разрядов:
print(format(13, '08b')) # число 13 в 8 разрядах
print(format(202, '08b')) # число 202 в 8 разрядах
Вывод:
00001101
11001010
Спецификатор '08b' означает «двоичная запись, дополненная нулями слева до 8 знаков». Ведущие нули на значение не влияют, но делают запись ровной и наглядной. Дальше растут производные единицы: 1024 байта — это килобайт, 1024 килобайта — мегабайт и так далее.
Двоичная арифметика: сложение и умножение на 2
Считать в двоичной системе можно так же, как в десятичной, только перенос происходит уже при сумме 2, а не 10. Правила сложения битов короткие:
- 0 + 0 = 0
- 0 + 1 = 1
- 1 + 1 = 10 (пишем 0, единицу переносим в старший разряд)
Сложим 101 (это 5) и 011 (это 3). В младшем разряде 1 + 1 = 10: пишем 0, переносим 1. В следующем разряде 0 + 1 плюс перенос 1 снова дает 10: пишем 0, переносим 1. В старшем 1 + 0 плюс перенос 1 = 10. Итог — 1000, то есть 8. И действительно 5 + 3 = 8.
Умножение на 2 в двоичной системе — это сдвиг всех разрядов на одну позицию влево (справа дописывается 0), примерно как умножение на 10 в десятичной приписывает ноль. Проверим оба факта кодом:
a = 0b101 # 5
b = 0b011 # 3
print(a + b) # обычное сложение
print(bin(a + b)) # тот же результат в двоичном виде
print(bin(a << 1)) # сдвиг влево на 1 разряд = умножение на 2
Вывод:
8
0b1000
0b1010
Запись 0b101 — это способ задать число сразу в двоичном виде прямо в коде: a равно 5. Оператор << сдвигает биты влево: a << 1 превращает 101 в 1010, то есть 5 становится 10. Важно не путать сдвиг с возведением в квадрат — сдвиг влево на n позиций умножает число на 2 в степени n, а не на само число.
От числа к бинарному коду символа
Теперь соберем цепочку из первого раздела на живом примере. Компьютер хранит текст не буквами, а номерами символов из таблицы кодировки. В таблице ASCII латинская буква A имеет номер 65. Чтобы записать этот номер битами, его переводят в двоичную систему и обычно выравнивают до байта:
print(ord('A')) # номер символа A в таблице
print(format(ord('A'), '08b')) # этот номер в двоичном виде (1 байт)
print(chr(0b01000001)) # обратно из битов в символ
Вывод:
65
01000001
A
Функция ord возвращает номер символа, format(..., '08b') записывает его двоичными цифрами в байте, а chr делает обратное преобразование. Здесь и видно разницу: двоичная система счисления отвечает за запись номера (65 -> 01000001), а бинарный код (кодировка) — за то, какому символу этот номер присвоен. Поменяется таблица — поменяется и код символа, хотя арифметика двоичной записи останется прежней.
Где это пригодится на практике
Понимание двоичной системы — это база, на которую опираются битовые операции, работа с масками и флагами, разбор форматов данных, цветовые модели и низкоуровневая оптимизация. Даже на прикладном уровне удобно уметь быстро прикинуть, что значение помещается в один байт (0-255), или объяснить, откуда берется перенос при сложении.
Освойте тему на практике
Разобраться с числами, системами счисления и битовыми операциями на практике, а не только в теории, помогает курс Python-разработка с нуля: на нем отрабатывают работу с числовыми типами, функции bin, int, format и операторы сдвига.
Освойте тему на практике
Посмотреть, как преподаватели объясняют такие темы, и задать свои вопросы можно на открытых вебинарах Otus — они бесплатные и проходят регулярно.
Смежные темы: Все о системах счисления в информатике, Двоичный код: описание, особенности, области применения.
FAQ
Почему компьютеры используют именно двоичную систему, а не десятичную? Электронную схему проще и надежнее делать с двумя устойчивыми состояниями (есть сигнал или нет, заряжено или нет), чем с десятью разными уровнями. Два состояния естественно отображаются на 0 и 1, поэтому двоичная система удобнее для физической реализации.
Чем двоичная система отличается от шестнадцатеричной? Основанием: у двоичной оно равно 2 (цифры 0 и 1), у шестнадцатеричной — 16 (цифры 0-9 и буквы A-F). Шестнадцатеричная запись короче и часто используется как компактная форма для тех же двоичных данных: одна шестнадцатеричная цифра заменяет ровно 4 бита.
Как в двоичной системе записывают отрицательные числа? Знак не пишут отдельным минусом, а кодируют битами по специальному правилу — чаще всего это дополнительный код (two’s complement), где старший бит отвечает за знак. Это отдельная тема, выходящая за рамки записи обычных целых.
Выводы
- Двоичная система счисления — позиционная запись чисел с основанием 2 и цифрами 0 и 1; вес разряда k равен 2 в степени k.
- Перевод 2 -> 10: умножить цифры на веса разрядов и сложить (1101 = 8 + 4 + 1 = 13); в Python это
int('1101', 2). - Перевод 10 -> 2: делить на 2 с остатком и читать остатки снизу вверх; в Python это
bin(13)->0b1101. - Бит — один разряд (0 или 1), байт — 8 битов и 256 значений (0-255); выравнивание до байта дает
format(n, '08b'). - В арифметике перенос идет при сумме 2, а сдвиг влево на 1 разряд умножает число на 2.
- Двоичная система счисления записывает числа, а бинарный код (кодировка) сопоставляет объектам номера, которые затем пишут в этой системе, — это разные уровни.



