Понятие системы счисления

Что такое система счисления: позиционные и непозиционные системы, основание, разряды и степени — с примерами разложения чисел и Python-расчётами.

Система счисления — набор символов (цифр) и правил, по которым они объединяются в числа. Главный параметр системы — её основание: количество различных цифр.

Позиционные и непозиционные системы

В непозиционных системах значение символа не зависит от его места в записи. Самый известный пример — римская система.

Запись

Значение

Правило

III

3

I + I + I

IV

4

V − I (меньший перед большим = вычитание)

IX

9

X − I

XLII

42

50 − 10 + 2

Арифметика с римскими числами крайне неудобна. Именно поэтому человечество перешло к позиционным системам, где значение цифры определяется её позицией (разрядом).

Разряды и степени основания

В позиционной системе с основанием N позиции нумеруются справа налево, начиная с нуля. Значение числа — сумма произведений каждой цифры на N в степени её позиции.

# Разложить десятичное число 5 309 по разрядам
n = 5309
digits = [int(d) for d in str(n)]    # [5, 3, 0, 9]
base = 10
result = 0

print(f"Разложение {n}:")
for i, d in enumerate(reversed(digits)):
    term = d * (base ** i)
    result += term
    print(f"  {d} × {base}^{i} = {term}")
print("Сумма:", result)

Вывод:

Разложение 5309:
  9 × 10^0 = 9
  0 × 10^1 = 0
  3 × 10^2 = 300
  5 × 10^3 = 5000
Сумма: 5309

То же самое в двоичной системе

Основание 2, цифры только 0 и 1. Разложим двоичное число 1101₂:

binary_digits = [1, 1, 0, 1]   # 1101₂, старший бит слева
base = 2
result = 0

print("Разложение 1101₂:")
for i, d in enumerate(reversed(binary_digits)):
    term = d * (base ** i)
    result += term
    print(f"  {d} × 2^{i} = {term}")
print("Десятичное значение:", result)

Вывод:

Разложение 1101₂:
  1 × 2^0 = 1
  0 × 2^1 = 0
  1 × 2^2 = 4
  1 × 2^3 = 8
Десятичное значение: 13

1101₂ = 13₁₀.

Шестнадцатеричная: буквы как цифры

Основание 16 требует 16 символов. Цифры 0–9 дополняются буквами A–F (10–15).

Символ

A

B

C

D

E

F

Значение

10

11

12

13

14

15

# Разложить шестнадцатеричное число 2F по разрядам
# 2F₁₆ = 2 × 16¹ + 15 × 16⁰
hex_digits = [2, 15]   # '2' и 'F'=15
base = 16
result = 0

print("Разложение 2F₁₆:")
for i, d in enumerate(reversed(hex_digits)):
    term = d * (base ** i)
    result += term
    print(f"  {d} × 16^{i} = {term}")
print("Десятичное значение:", result)

Вывод:

Разложение 2F₁₆:
  15 × 16^0 = 15
  2 × 16^1 = 32
Десятичное значение: 47

Универсальная функция перевода

def from_base(digits_str, base):
    """Перевести число из любой системы с основанием base в десятичную."""
    digits_str = digits_str.upper()
    result = 0
    for ch in digits_str:
        value = int(ch, 16) if ch.isalpha() else int(ch)
        result = result * base + value
    return result

print(from_base("101010", 2))    # 42
print(from_base("52", 8))         # 42
print(from_base("2A", 16))        # 42

Вывод:

42
42
42

Коротко

  • Система счисления задаётся основанием — количеством различных цифр.
  • В позиционной системе ценность цифры зависит от её разряда (степени основания).
  • Непозиционные системы (римская) неудобны для вычислений — позиционные победили.
  • Шестнадцатеричная система использует буквы A–F как цифры 10–15.
  • Любое число переводится в десятичную через сумму: цифра × основание^позиция.
Проверьте себя
1. Чему равно двоичное число 1010 в десятичной системе?
A8
B10
C12
D4
2. Сколько будет XLII в арабских числах?
A40
B42
C62
D22
3. Чему равно восьмеричное число 234 в десятичной системе?
A154
B162
C156
D148
4. Почему шестидесятеричная система оказала влияние на современное время?
AВавилоняне использовали её, и именно оттуда деление часа на 60 минут
BЕё придумали в эпоху компьютеров для синхронизации
CОна была принята международным стандартом ISO
DИз-за удобства деления на 12 частей