Тема 4

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

Что проверяют по спецификации:

Позиционные и непозиционные системыПеревод в десятичную системуПеревод из десятичной в любую системуБыстрый перевод 2 ↔ 8 ↔ 16: триады и тетрадыДвоичная арифметика: сложение, вычитание, умножениеСравнение чисел и подсчёт единицОтрицательные числа и диапазон ячейкиСистемы счисления в Python

Суть за минуту

Система счисления — это способ записывать числа с помощью цифр. В позиционной системе значение цифры зависит от её места (разряда), а основание qq показывает, сколько цифр используется и во сколько раз «весит» каждый следующий разряд. Компьютер хранит всё в двоичной системе, а восьмеричная и шестнадцатеричная нужны людям как короткая запись двоичного кода. На ЕНТ нужно уметь переводить целые числа между системами 2, 8, 10, 16 (и любой другой), складывать и вычитать двоичные числа, сравнивать числа в разных системах и считать единицы в двоичной записи. Почти любую задачу решают два приёма: развёрнутая запись (в десятичную) и деление с остатком (из десятичной).

Объясняем просто

Система счисления похожа на упаковку яиц: в десятичной системе мы складываем по 10 в коробку, 10 коробок — в ящик, а в двоичной кладём всего по 2.

Цифра и её место

В числе 555 три одинаковые пятёрки, но они значат 500, 50 и 5. Значение цифры зависит от позиции — поэтому система называется позиционной.

Основание

Основание qq — это сколько разных цифр есть в системе: в двоичной 2 цифры (0 и 1), в восьмеричной 8 (0–7), в шестнадцатеричной 16 (0–9 и A–F). Самая большая цифра всегда q−1q-1.

Почему компьютер «думает» двоично

У электрического сигнала легко различить два состояния: есть ток или нет. Поэтому всё в компьютере — числа, текст, картинки — хранится как 0 и 1.

8 и 16 — сокращения для людей

Длинную строку из нулей и единиц трудно читать. Каждые 3 двоичные цифры заменяются одной восьмеричной, каждые 4 — одной шестнадцатеричной: 111111112=3778=FF1611111111_2 = 377_8 = FF_{16}.

Главные формулы

Aq=an−1qn−1+⋯+a1q1+a0q0A_q = a_{n-1}q^{n-1} + \dots + a_1 q^1 + a_0 q^0
Развёрнутая форма: перевод из системы с основанием qq в десятичную
N=qn,Amax⁡=qn−1N = q^n,\quad A_{\max} = q^n - 1
Сколько разных чисел можно записать nn цифрами в системе с основанием qq и каково самое большое
8=23,16=248 = 2^3,\quad 16 = 2^4
Одна восьмеричная цифра = 3 бита (триада), одна шестнадцатеричная = 4 бита (тетрада)
2n−1=11…1⏟n2,2n=100…0⏟n22^n - 1 = \underbrace{11\dots1}_{n}{}_2,\qquad 2^n = 1\underbrace{00\dots0}_{n}{}_2
Степени двойки и числа «на единицу меньше» в двоичной записи
2n−2m=1…1⏟n−m0…0⏟m2, n>m2^n - 2^m = \underbrace{1\dots1}_{n-m}\underbrace{0\dots0}_{m}{}_2,\ n>m
Разность степеней двойки: n−mn-m единиц и mm нулей
[−x]доп=2n−x[-x]_{\text{доп}} = 2^n - x
Дополнительный код отрицательного числа в nn-битной ячейке

Понятия и термины

Система счисления
Способ записи чисел с помощью набора знаков (цифр) по определённым правилам
Позиционная система
Система, в которой значение цифры зависит от её позиции (разряда) в записи числа: десятичная, двоичная, восьмеричная, шестнадцатеричная
Непозиционная система
Система, в которой значение знака не зависит от его места: римская (I, V, X, L, C, D, M)
Основание системы
Количество цифр, используемых в позиционной системе; во столько раз единица соседнего старшего разряда больше младшего
Разряд
Позиция цифры в записи числа; разряды нумеруют справа налево с нуля
Двоичная система счисления
Позиционная система счисления с основанием 2. В ней используются только две цифры: 0 и 1
Восьмеричная система счисления
Позиционная система счисления с основанием 8. Для записи чисел используются цифры от 0 до 7
Шестнадцатеричная система счисления
Позиционная система счисления с основанием 16. Используются десятичные цифры от 0 до 9 и латинские буквы A, B, C, D, E, F (A = 10, …, F = 15)
Десятичная система счисления
Позиционная система счисления с основанием 10. Используются цифры от 0 до 9
Дополнительный код
Способ хранить отрицательные целые числа: инвертировать все биты модуля числа и прибавить 1

Разбор темы

Позиционные и непозиционные системы 10 класс

В непозиционной римской системе знак всегда значит одно и то же: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000. Знаки складываются, но меньший знак перед большим вычитается: XIV=10+(5−1)=14XIV = 10 + (5 - 1) = 14, MCMXCIX=1000+900+90+9=1999MCMXCIX = 1000 + 900 + 90 + 9 = 1999.

В позиционной системе цифра умножается на «вес» разряда — степень основания: 202410=2⋅103+0⋅102+2⋅101+4⋅1002024_{10} = 2\cdot10^3 + 0\cdot10^2 + 2\cdot10^1 + 4\cdot10^0. Разряды считаем справа налево, начиная с нуля.

Основание пишут нижним индексом: 1012101_2, 1018101_8, 10116101_{16} — это три разных числа (5, 65 и 257). В записи числа не может быть цифры, большей или равной основанию: запись 109281092_8 невозможна, потому что цифр 8 и 9 в восьмеричной системе нет.

Шестнадцатеричные цифры-буквы: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15. Их надо помнить наизусть.

Перевод в десятичную систему 10 класс

Пронумеруйте разряды справа налево с нуля, умножьте каждую цифру на qq в степени номера разряда и сложите.

10112=1⋅23+0⋅22+1⋅21+1⋅20=8+0+2+1=111011_2 = 1\cdot2^3 + 0\cdot2^2 + 1\cdot2^1 + 1\cdot2^0 = 8 + 0 + 2 + 1 = 11.

3758=3⋅64+7⋅8+5=192+56+5=253375_8 = 3\cdot64 + 7\cdot8 + 5 = 192 + 56 + 5 = 253. 2F16=2⋅16+15=472F_{16} = 2\cdot16 + 15 = 47. 2123=2⋅9+1⋅3+2=23212_3 = 2\cdot9 + 1\cdot3 + 2 = 23.

Для двоичных чисел удобно выписать «веса» над цифрами: 128, 64, 32, 16, 8, 4, 2, 1 — и сложить веса там, где стоят единицы: 100111012=128+16+8+4+1=15710011101_2 = 128 + 16 + 8 + 4 + 1 = 157.

Схема Горнера (удобно в уме и в программе): идём по цифрам слева направо, n=n⋅q+цифраn = n\cdot q + \text{цифра}. Для 3758375_8: 3→3⋅8+7=31→31⋅8+5=2533 \to 3\cdot8+7 = 31 \to 31\cdot8+5 = 253.

Перевод из десятичной в любую систему 10 класс

Делим число на основание qq с остатком, частное снова делим, пока частное не станет 0. Остатки, записанные снизу вверх (от последнего к первому), и есть ответ.

25 : 2 = 12, остаток 1
12 : 2 = 6,  остаток 0
 6 : 2 = 3,  остаток 0
 3 : 2 = 1,  остаток 1
 1 : 2 = 0,  остаток 1
Читаем снизу вверх: 11001

Значит, 2510=11001225_{10} = 11001_2. Проверка: 16+8+1=2516 + 8 + 1 = 25.

Так же в восьмеричную: 100:8=12100 : 8 = 12 ост. 4; 12:8=112 : 8 = 1 ост. 4; 1:8=01 : 8 = 0 ост. 1, ответ 1448144_8. В шестнадцатеричную остатки 10–15 записывают буквами: 157:16=9157 : 16 = 9 ост. 13 (D), 9:16=09 : 16 = 0 ост. 9, ответ 9D169D_{16}.

Быстрый способ для двоичной системы — разложить число на степени двойки: 100=64+32+4100 = 64 + 32 + 4, значит единицы стоят в разрядах 6, 5 и 2: 110010021100100_2.

Быстрый перевод 2 ↔ 8 ↔ 16: триады и тетрады 10 класс

Так как 8=238 = 2^3, каждая восьмеричная цифра — это ровно 3 бита (триада). Так как 16=2416 = 2^4, каждая шестнадцатеричная цифра — 4 бита (тетрада).

Из двоичной в восьмеричную: разбиваем число на тройки справа налево, слева при необходимости дописываем нули, каждую тройку заменяем цифрой: 11010112=001 101 011=15381101011_2 = 001\ 101\ 011 = 153_8.

Из двоичной в шестнадцатеричную: разбиваем на четвёрки справа налево: 11010112=0110 1011=6B161101011_2 = 0110\ 1011 = 6B_{16}.

Обратно: каждую цифру заменяем тремя (для 8) или четырьмя (для 16) битами, не забывая ведущие нули внутри числа: 5A16=0101 1010=101101025A_{16} = 0101\ 1010 = 1011010_2; 708=111 000=111000270_8 = 111\ 000 = 111000_2.

Между 8 и 16 переходят через двоичную: 7538=111 101 0112=1 1110 10112=1EB16753_8 = 111\ 101\ 011_2 = 1\ 1110\ 1011_2 = 1EB_{16}.

dec bin  oct hex   dec bin  oct hex
 0  0000  0   0     8  1000 10   8
 1  0001  1   1     9  1001 11   9
 2  0010  2   2    10  1010 12   A
 3  0011  3   3    11  1011 13   B
 4  0100  4   4    12  1100 14   C
 5  0101  5   5    13  1101 15   D
 6  0110  6   6    14  1110 16   E
 7  0111  7   7    15  1111 17   F

Двоичная арифметика: сложение, вычитание, умножение 10 класс

Сложение по разрядам справа налево: 0+0=00+0=0, 0+1=10+1=1, 1+1=101+1=10 (пишем 0, 1 переносим), 1+1+1=111+1+1=11 (пишем 1, 1 переносим).

   1011   (11)
 +  111   ( 7)
 ------
  10010   (18)

Вычитание: 0−0=00-0=0, 1−0=11-0=1, 1−1=01-1=0, 0−10-1 — занимаем единицу у старшего разряда, она даёт 10210_2, и 10−1=110-1=1. Пример: 111012−10112=10010211101_2 - 1011_2 = 10010_2 (29−11=1829 - 11 = 18).

Умножение — как столбиком в десятичной, только проще: умножаем на 0 или на 1 и складываем сдвинутые строки. 1012⋅112=101+1010=11112101_2\cdot11_2 = 101 + 1010 = 1111_2 (5⋅3=155\cdot3=15).

Умножить на 2k2^k — дописать справа kk нулей (1012⋅4=101002101_2\cdot 4 = 10100_2); целочисленно разделить на 2k2^k — отбросить kk последних цифр. Так же в любой системе: умножение на qq дописывает ноль.

Проверяйте себя переводом в десятичную: ошибку в переносе так заметить легче всего.

Сравнение чисел и подсчёт единиц 10–11 класс

Чтобы сравнить числа в разных системах, переведите их в одну систему (обычно в десятичную или двоичную). 11001002=1001100100_2 = 100, 1438=99143_8 = 99, 6616=10266_{16} = 102.

Чем больше основание, тем больше «весит» та же запись: 10116>10110>1018>1012101_{16} > 101_{10} > 101_8 > 101_2.

Число разных nn-значных записей в системе qq — qnq^n, наибольшее nn-значное число — qn−1q^n - 1: например, 7778=83−1=511777_8 = 8^3 - 1 = 511, FF16=255FF_{16} = 255, 111111112=25511111111_2 = 255.

Количество единиц: переведите число в двоичную и посчитайте. Для выражений со степенями пользуйтесь шаблонами: 2n2^n — одна единица; 2n−12^n - 1 — nn единиц; 2n−2m2^n - 2^m — n−mn-m единиц. Степени 4 и 8 сводятся к двойке: 4k=22k4^k = 2^{2k}, 8k=23k8^k = 2^{3k}.

Чётность: двоичное число чётно, если оканчивается на 0. В системе с основанием qq последняя цифра — это остаток от деления числа на qq.

Отрицательные числа и диапазон ячейки 10–11 класс

В nn битах без знака помещаются числа от 00 до 2n−12^n - 1: в байте от 0 до 255.

Со знаком старший бит означает знак (0 — плюс, 1 — минус), диапазон от −2n−1-2^{n-1} до 2n−1−12^{n-1}-1: в байте от −128-128 до 127127.

Прямой код — модуль числа плюс бит знака. Обратный код отрицательного числа — инвертировать все биты модуля. Дополнительный код — обратный код плюс 1, или сразу 2n−x2^n - x. Компьютер хранит отрицательные целые именно в дополнительном коде, потому что тогда вычитание сводится к сложению.

Пример: −45-45 в 8 битах. 45=0010110145 = 00101101, инверсия 1101001011010010, плюс 1: 1101001111010011. Проверка: 256−45=211=110100112256 - 45 = 211 = 11010011_2.

Системы счисления в Python 10–11 класс

bin(n), oct(n), hex(n) возвращают строку с префиксом: bin(10) → '0b1010', oct(10) → '0o12', hex(255) → '0xff'. Префикс убирают срезом [2:].

int(s, base) переводит строку из системы с основанием от 2 до 36 в целое: int('ff', 16) → 255, int('212', 3) → 23.

format(n, '08b') даёт двоичную запись ровно из 8 цифр с ведущими нулями; 'o' и 'X' — восьмеричная и шестнадцатеричная (заглавные буквы).

bin(n).count('1') — количество единиц в двоичной записи. Ручной перевод — цикл с n % q и n // q (см. панель кода).

Примеры задач с решением

Задача 1Переведите 15710157_{10} в двоичную систему.
  1. Делим на 2: 157→78157 \to 78 ост. 1; 78→3978 \to 39 ост. 0; 39→1939 \to 19 ост. 1; 19→919 \to 9 ост. 1; 9→49 \to 4 ост. 1; 4→24 \to 2 ост. 0; 2→12 \to 1 ост. 0; 1→01 \to 0 ост. 1.
  2. Остатки снизу вверх: 1 0 0 1 1 1 0 1.
  3. Проверка: 128+16+8+4+1=157128 + 16 + 8 + 4 + 1 = 157.
Ответ 10011101210011101_2
Задача 2Переведите 10110111210110111_2 в восьмеричную и шестнадцатеричную системы.
  1. Триады справа налево: 10 110 11110\ 110\ 111 → 010=2010 = 2, 110=6110 = 6, 111=7111 = 7, получаем 2678267_8.
  2. Тетрады справа налево: 1011 01111011\ 0111 → 1011=11=B1011 = 11 = B, 0111=70111 = 7, получаем B716B7_{16}.
  3. Проверка через десятичную: 2⋅64+6⋅8+7=1832\cdot64 + 6\cdot8 + 7 = 183 и 11⋅16+7=18311\cdot16 + 7 = 183.
Ответ 2678267_8 и B716B7_{16}
Задача 3Вычислите 10112+11121011_2 + 111_2. Ответ запишите в двоичной системе.
  1. Разряд 0: 1+1=101 + 1 = 10, пишем 0, переносим 1.
  2. Разряд 1: 1+1+1=111 + 1 + 1 = 11, пишем 1, переносим 1. Разряд 2: 0+1+1=100 + 1 + 1 = 10, пишем 0, переносим 1.
  3. Разряд 3: 1+1=101 + 1 = 10, пишем 0, переносим 1 в новый разряд 4.
  4. Проверка: 11+7=18=16+211 + 7 = 18 = 16 + 2.
Ответ 10010210010_2
Задача 4Какое из чисел наибольшее: 110010021100100_2, 1438143_8, 661666_{16}, 10110101_{10}?
  1. 11001002=64+32+4=1001100100_2 = 64 + 32 + 4 = 100.
  2. 1438=64+32+3=99143_8 = 64 + 32 + 3 = 99.
  3. 6616=6⋅16+6=10266_{16} = 6\cdot16 + 6 = 102.
  4. Сравниваем 100, 99, 102, 101.
Ответ 661666_{16}
Задача 5В системе с каким основанием число 251025_{10} записывается как 3131?
  1. Развёрнутая форма: 31q=3q+131_q = 3q + 1.
  2. Уравнение 3q+1=253q + 1 = 25, отсюда q=8q = 8.
  3. Проверка: цифры 3 и 1 меньше 8, 3⋅8+1=253\cdot8+1 = 25.
Ответ 8
Задача 6Переведите 7538753_8 в шестнадцатеричную систему.
  1. Каждую восьмеричную цифру — в триаду: 7=1117 = 111, 5=1015 = 101, 3=0113 = 011, получаем 1111010112111101011_2.
  2. Делим на тетрады справа налево: 1 1110 10111\ 1110\ 1011 → 0001=10001 = 1, 1110=E1110 = E, 1011=B1011 = B.
  3. Проверка: 7538=448+40+3=491753_8 = 448 + 40 + 3 = 491; 1EB16=256+224+11=4911EB_{16} = 256 + 224 + 11 = 491.
Ответ 1EB161EB_{16}

Сложные задачи: шаг за шагом

Задача 1Сколько единиц в двоичной записи числа 420+230−164^{20} + 2^{30} - 16?

Идея: Сведите всё к степеням двойки и используйте шаблон 2n−2m2^n - 2^m.

  1. Степени двойки
    420=2404^{20} = 2^{40}, 16=2416 = 2^4. Выражение: 240+(230−24)2^{40} + (2^{30} - 2^4).
  2. Шаблон разности
    230−242^{30} - 2^4 — это 30−4=2630 - 4 = 26 единиц, за которыми идут 4 нуля.
  3. Сложение
    2402^{40} даёт одну единицу в 40-м разряде, он не пересекается с разрядами 4–29, поэтому переносов нет: 26+1=2726 + 1 = 27.
Ответ 27
Задача 2Укажите все основания систем счисления, в которых запись числа 23 оканчивается на цифру 2.

Идея: Последняя цифра записи — это остаток от деления числа на основание.

  1. Условие на остаток
    23 mod q=223 \bmod q = 2, значит 23−2=2123 - 2 = 21 делится на qq.
  2. Делители
    Делители 21: 1, 3, 7, 21. Основание должно быть больше цифры 2, поэтому q∈{3,7,21}q \in \{3, 7, 21\}.
  3. Проверка
    23=2123=327=122123 = 212_3 = 32_7 = 12_{21} — все записи оканчиваются на 2.
Ответ 3, 7, 21
Задача 3Запишите число −45-45 в дополнительном коде в 8-битной ячейке.

Идея: Инвертировать биты модуля и прибавить 1 (или вычислить 28−452^8 - 45).

  1. Модуль
    45=32+8+4+1=00101101245 = 32 + 8 + 4 + 1 = 00101101_2 (8 бит).
  2. Обратный код
    Инвертируем все биты: 1101001011010010.
  3. Плюс 1
    11010010+1=1101001111010010 + 1 = 11010011. Проверка: 256−45=211=128+64+16+2+1256 - 45 = 211 = 128 + 64 + 16 + 2 + 1.
Ответ 1101001111010011

Частые ловушки на ЕНТ

  • Остатки при делении читают снизу вверх, а не сверху вниз; иначе 2525 превратится в 1001110011 вместо 1100111001.
  • Разбивать на триады и тетрады нужно справа налево (от младшего разряда), а недостающие нули дописывать слева.
  • При переводе A16A_{16}, B16B_{16} … в двоичную каждая цифра даёт ровно 4 бита: 3A16=0011 10103A_{16} = 0011\ 1010, а не 11 101011\ 1010 с потерей нулей внутри числа.
  • Цифра не может быть больше или равна основанию: запись 1288128_8 или 1022102_2 недопустима — такой вариант ответа сразу отбрасывайте.
  • При двоичном сложении 1+1=101 + 1 = 10, а не 2: пишем 0 и переносим единицу; при 1+1+11 + 1 + 1 пишем 1 и тоже переносим.

Запомнить

В десятичную — умножай цифры на степени основания и складывай; из десятичной — дели с остатком и читай остатки снизу вверх; 8 — это 3 бита, 16 — это 4 бита.

Проверь себя

1. Чему равно 1011012101101_2 в десятичной системе?
  1. 43
  2. 45
  3. 47
  4. 90
Показать ответ

45 32+8+4+1=4532 + 8 + 4 + 1 = 45.

2. Как записывается 10010100_{10} в восьмеричной системе?
  1. 1448144_8
  2. 1408140_8
  3. 1248124_8
  4. 64864_8
Показать ответ

1448144_8 100=1⋅64+4⋅8+4100 = 1\cdot64 + 4\cdot8 + 4.

3. Как записывается 3A163A_{16} в двоичной системе?
  1. 111010021110100_2
  2. 1010112101011_2
  3. 1110102111010_2
  4. 110101021101010_2
Показать ответ

1110102111010_2 3=00113 = 0011, A=1010A = 1010, получаем 00111010=111010200111010 = 111010_2.

4. Сколько единиц в двоичной записи числа 255?
  1. 8
  2. 7
  3. 9
  4. 16
Показать ответ

8 255=28−1=111111112255 = 2^8 - 1 = 11111111_2.

5. Вычислите 11012+101121101_2 + 1011_2.
  1. 10110210110_2
  2. 11100211100_2
  3. 10100210100_2
  4. 11000211000_2
Показать ответ

11000211000_2 13+11=24=11000213 + 11 = 24 = 11000_2.

6. Какая система счисления является непозиционной?
  1. Двоичная
  2. Шестнадцатеричная
  3. Римская
  4. Восьмеричная
Показать ответ

Римская В римской записи знак (например, X = 10) не меняет значение в зависимости от места.

Связанные темы

Узнай свой уровень: бесплатная диагностика ЕНТ