Системы счисления

Системы счисления: двоичная, восьмеричная, шестнадцатеричная — как они устроены, почему компьютеры используют двойку и как переводить числа между системами.

Система счисления — это способ записи чисел с помощью фиксированного набора символов (цифр). Основание системы определяет, сколько различных символов используется.

Позиционный принцип

В позиционных системах значение цифры зависит от её позиции. Каждая позиция — это степень основания.

Пример: десятичное число 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(строка, основание) — обратно.
Проверьте себя
1. Сколько различных цифр использует шестнадцатеричная система счисления?
A8 (от 0 до 7)
B10 (от 0 до 9)
C16 (цифры 0–9 и буквы A–F)
D2 (0 и 1)
2. Чем позиционная система счисления отличается от непозиционной?
AВ позиционной системе больше цифр
BПозиционные системы используются только в компьютерах
CВ позиционной системе значение символа зависит от его позиции в числе
DВ непозиционной системе используется основание 10
3. Какая система счисления используется в компьютерах для хранения данных?
AДвоичная
BДесятичная
CВосьмеричная
DШестнадцатеричная