Системы счисления
Системы счисления: двоичная, восьмеричная, шестнадцатеричная — как они устроены, почему компьютеры используют двойку и как переводить числа между системами.
Система счисления — это способ записи чисел с помощью фиксированного набора символов (цифр). Основание системы определяет, сколько различных символов используется.
Позиционный принцип
В позиционных системах значение цифры зависит от её позиции. Каждая позиция — это степень основания.
Пример: десятичное число 3 472 раскладывается так:
3 472 = 3 × 10³ + 4 × 10² + 7 × 10¹ + 2 × 10⁰
= 3000 + 400 + 70 + 2
Тот же принцип работает в любой позиционной системе — меняется только основание.
Четыре главные системы
Система | Основание | Цифры | Применение |
Десятичная | 10 | 0–9 | повседневный счёт |
Двоичная | 2 | 0, 1 | логика ЭВМ, хранение данных |
Восьмеричная | 8 | 0–7 | права доступа Unix, старые ЭВМ |
Шестнадцатеричная | 16 | 0–9, A–F | цвета CSS, адреса памяти, отладка |
Почему компьютеры работают в двоичной системе
Транзистор — основной элемент процессора — имеет два состояния: закрыт (0) и открыт (1). Двоичная система идеально отображает эту физику. Каждый бит — один транзистор, байт — восемь.
Перевод из двоичной в десятичную
Каждую цифру двоичного числа умножают на соответствующую степень двойки и складывают:
# Разобрать двоичное число 10110 по разрядам
bits = [1, 0, 1, 1, 0] # старший бит слева
result = 0
for i, bit in enumerate(reversed(bits)):
result += bit * (2 ** i)
print(f" бит {bit} × 2^{i} = {bit * (2 ** i)}")
print("Итого:", result)
Вывод:
бит 0 × 2^0 = 0 бит 1 × 2^1 = 2 бит 1 × 2^2 = 4 бит 0 × 2^3 = 0 бит 1 × 2^4 = 16 Итого: 22
Число 10110₂ = 22₁₀.
Перевод из десятичной в двоичную
Делим число на 2, записываем остатки снизу вверх:
def to_binary(n):
steps = []
while n > 0:
steps.append(f" {n} ÷ 2 = {n // 2}, остаток {n % 2}")
n //= 2
for s in steps:
print(s)
to_binary(42)
Вывод:
42 ÷ 2 = 21, остаток 0 21 ÷ 2 = 10, остаток 1 10 ÷ 2 = 5, остаток 0 5 ÷ 2 = 2, остаток 1 2 ÷ 2 = 1, остаток 0 1 ÷ 2 = 0, остаток 1
Читаем остатки снизу вверх: 101010₂. Проверка: 32 + 8 + 2 = 42.
Встроенные функции Python для перевода
n = 42
print("Двоичная: ", bin(n)) # 0b101010
print("Восьмеричная: ", oct(n)) # 0o52
print("Шестнадцатеричная:", hex(n)) # 0x2a
# Обратно в десятичную: int(строка, основание)
print(int("101010", 2)) # 42
print(int("52", 8)) # 42
print(int("2a", 16)) # 42
Вывод:
Двоичная: 0b101010 Восьмеричная: 0o52 Шестнадцатеричная: 0x2a 42 42 42
Таблица соответствий (0–15)
Дес. | Двоич. | Восьм. | Шест. |
0 | 0000 | 0 | 0 |
1 | 0001 | 1 | 1 |
2 | 0010 | 2 | 2 |
3 | 0011 | 3 | 3 |
4 | 0100 | 4 | 4 |
5 | 0101 | 5 | 5 |
6 | 0110 | 6 | 6 |
7 | 0111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
16 | 10000 | 20 | 10 |
Коротко
- Системы счисления различаются основанием: 10 — десятичная, 2 — двоичная, 8 — восьмеричная, 16 — шестнадцатеричная.
- В позиционной системе каждая цифра умножается на основание в степени своей позиции.
- Двоичная система — основа компьютерной техники: два состояния транзистора.
- Python:
bin(),oct(),hex()— перевод из десятичной;int(строка, основание)— обратно.