Вы находитесь на странице: 1из 10

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

1. Позиционные системы счисления (ПСС)


Красным цветом будем выделять разряды числа в некоторой системе
счисления (СС).
1.1. Двоичная СС
Целые числа в двоичной СС представляются последовательностью
двоичных разрядов

и значение числа можно вычислить по формуле:

2 – основание СС;
n – количество разрядов числа N;
– коэффициенты полинома, { }.
Пример перевода четырёхразрядного двоичного числа 10012 в
десятичную СС:
N = 1∙8 + 0∙4 + 0∙2 + 1∙1 = 910
Значащие разряды числа начинаются со старшей единицы. Например,
число 0010110 имеет пять значащих разрядов 10110. Значащие разряды
имеют такое название потому, что именно они определяют значение числа.
Насыщенное число – это число, содержащее во всех разрядах
максимальные значения. Например, число 1111 является насыщенным, а
число 1011 – ненасыщенным.
Задача. Как быстро перевести насыщенное двоичное число 11112 в
десятичную СС?
Решение. Мы не будем использовать формулу

так как тогда нам придётся выполнить много умножений и сложений. Мы


воспользуемся тем, что следующее за 11112 в ряду целых чисел идёт число
100002, которое легко вычисляется – достаточно найти четвёртую степень
двойки, а потом вычесть единицу
011112 = 100002 – 1 = 24 – 1 = 16 – 1 = 15
Вещественные числа в двоичной СС представляются
последовательностью двоичных разрядов

и значение числа можно вычислить по формуле:

n – количество разрядов целой части числа N;


m – количество разрядов дробной части числа N;
– коэффициенты целой части полинома;
– коэффициенты дробной части полинома, { }.
Пример перевода четырёхразрядного вещественного двоичного числа
10.112 в десятичную СС:

1.2. Восьмеричная СС
Числа в восьмеричной СС представляются последовательностью
восьмеричных разрядов

и значение числа можно вычислить по формуле:

8 – основание СС;
, – коэффициенты полинома, { }.
Пример перевода четырёхразрядного вещественного восьмеричного
числа 61.738 в десятичную СС:

1.3. Шестнадцатеричная СС
Числа в шестнадцатеричной СС представляются последовательностью
16-ричных разрядов

и значение числа можно вычислить по формуле:

16 – основание СС;
, – коэффициенты полинома, { }, веса
определяются соответствием { } { }.
Пример перевода четырёхразрядного вещественного
шестнадцатеричного числа A1.F316 в десятичную СС:

1.4. Табличное соответствие между числами СС с основанием,


равным степени двойки
Между двоичными и восьмеричными числами легко делается перевод
путём замены двоичных триад восьмеричными цифрами или наоборот
восьмеричных цифр – триадами. Триада состоит из трёх двоичных разрядов.
С помощью триады можно выразить ровно восемь цифр (табл. 1), т.е. все
восьмеричные цифры, так как .
Например, двоичное число 1010111002 легко преобразуется в
восьмеричное число 5348 и обратно
⏟⏟⏟

Таблица 1. Взаимно-однозначное соответствие между двоичными триадами и


символами восьмеричного алфавита
Двоичная Восьмеричная Десятичное
триада цифра число
000 0 0
001 1 1
010 2 2
011 3 3
100 4 4
101 5 5
110 6 6
111 7 7
Зелёным цветом выделены значащие разряды чисел.
Таблица 2. Взаимно-однозначное соответствие между двоичными тетрадами
и символами шестнадцатеричного алфавита
Двоичная Шестнадцатеричная Десятичное
тетрада цифра число
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 A 10
1011 B 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15
Между двоичными и шестнадцатеричными числами перевод делается
легко – путём замены двоичных тетрад шестнадцатеричными цифрами или
наоборот шестнадцатеричных цифр тетрадами. Тетрада состоит из четырёх
двоичных разрядов. С помощью тетрады можно выразить ровно 16 цифр
(табл. 2), т.е. все 16 цифр, так как .
Например, двоичное число 1101010111002 легко преобразуется в
16-ричное число D5C16 и обратно
⏟ ⏟ ⏟

Шестнадцатеричное представление используется в низкоуровневом


программировании и, например, в шестнадцатеричных редакторах.
1.5. Перевод целых чисел из десятичной СС в другие ПСС
Способ 1. Посредством последовательного деления остатков числа на
основание СС. Легко программируется.

Способ 2. Наивный. Позволяет переводить в уме небольшие


десятичные числа. Идея – вычитание из остатка числа максимальных
степеней основания СС.
Задача. Дано десятичное число 148. Требуется перевести его в
восьмеричную и двоичную СС.
Шаги решения для восьмеричной СС:
а) Максимальная степень числа 8, не превосходящая исходное число
148 равна .
б) Сколько раз число 64 вмещается в число 148? Очевидно 2 раза.
Остаток: 148 - 128 = 20.
в) Сколько раз число 8 вмещается в число 20? Очевидно 2 раза.
Остаток: 20 - 16 = 4.
г) Сколько раз число 1 вмещается в число 4? Очевидно 4 раза.
Ответ: .
Шаги решения для двоичной СС:
а) Максимальная степень числа 2, не превосходящая исходное число
148 равна .
б) Остаток: 148 - 128 = 20.
в) Максимальная степень числа 2, не превосходящая остаток 20 равна
.
г) Остаток: 20 - 16 = 4.
д) Максимальная степень числа 2, не превосходящая остаток 4 равна
.
г) Остаток: 4 - 4 = 0.
Таким образом, мы собрали число 148 из степеней двойки: 128+16+4.
Остальные степени не участвуют, поэтому их весовые коэффициенты равны
нулю.

Ответ: ⏟ ⏞ ⏞ ⏟ ⏞ ⏟ ⏞ ⏞.

1.6. Перевод дробной части числа из десятичной СС в другие ПСС


Вещественные десятичные числа переводятся в двоичное
представление по частям: сначала переводится целая часть, потом – дробная.
Существует два способа перевода дробной части числа в двоичное
представление.
Способ 1. Посредством последовательного умножения остатков числа
на основание СС. Легко программируется.
Задача. Дана десятичная дробь 0,375. Необходимо перевести её в
двоичную СС.
Решение:
а) Умножаем исходное число на основание СС:

Целая часть 0 является первой цифрой результата.


б) Умножаем дробную часть на основание СС:

Целая часть 1 является второй цифрой результата.


в) Умножаем дробную часть 0,5 на основание СС:

Целая часть 1 является третьей цифрой результата.


Дробная часть равна нулю, следовательно, перевод завершён.
Ответ: .
Способ 2. Наивный. Позволяет переводить в уме небольшие дроби.
Идея – вычитание из остатка числа максимальных отрицательных степеней
основания СС до тех пор, пока остаток не обнулится.
Задача. Дана десятичная дробь 0,375. Необходимо перевести её в
двоичную СС.
Решение:
а) Входит ли в число 0,375. Нет. Следовательно, первая
цифра результата равна 0.
б) Входит ли в число 0,375. Да. Следовательно, вторая
цифра результата равна 1. Остаток 0,375 - 0,25 = 0,125.
в) Входит ли в остаток 0,125. Да. Следовательно, третья
цифра результата равна 1. Новый остаток 0,125 - 0,125 = 0,0. Так как остаток
равен нулю, то перевод завершён.
Проверяем:
Ответ: .
1.7. Ввод/вывод двоичных и шестнадцатеричных чисел на языке
C#
Все числа представляются в компьютере в двоичном формате,
независимо от выбранного типа данных. Ввод/вывод чисел по умолчанию
производится в десятичной СС. Однако ввод/вывод может осуществляться и
в других СС. Непосредственно в программе можно задавать двоичные,
десятичные и шестнадцатеричные числа:
int x = 0b1001; // двоичное число
int y = 12; // десятичное число
int z = 0x10; // шестнадцатеричное число
Для задания двоичных чисел в языке C# используется префикс 0b (от
слова binary), для шестнадцатеричных – префикс 0x (от слова hexadecimal).
Восьмеричные числа задавать в C# нельзя.
С клавиатуры можно вводить двоичные, восьмеричные, десятичные и
шестнадцатеричные числа. Вводятся они в виде строки, которую потом надо
преобразовать в число с заданным основанием СС:
string x = Console.ReadLine(); // ввод числа в виде строки
int x1 = Convert.ToInt32(x,8); // из восьмеричного числа в int
В качестве основания СС (в примере – параметр 8) можно использовать
2, 8, 10, 16. Параметр 10 является параметром по умолчанию.
В случае ввода большого числа, которое не помещается в диапазон 32-
разрядных чисел, можно воспользоваться 64-разрядной функцией
преобразования, но тогда и само число будет иметь тип long:
long x1 = Convert.ToInt64(x,8); // из восьмеричного числа в long
Для вывода на экран чисел в двоичной, восьмеричной, десятичной и
шестнадцатеричной СС надо преобразовать число в строку, указав желаемое
основание СС:
int x = 12; // десятичное число
string s = Convert.ToString(x, 2); // в строку с двоичным числом
Преобразование в десятичное число можно выполнять без указания
основания СС.
Следующий пример показывает способы ввода и вывода чисел в
различных СС:
static void Main()
{
int x = 0b1001; // двоичное число
string x1 = Convert.ToString(x, 10);
Console.WriteLine("В десятичной системе 0b1001 = " + x1);

int y = 0x10; // шестнадцатеричное число


string y1 = Convert.ToString(y, 10);
Console.WriteLine("В десятичной системе 0x10 = " + y1);

Console.Write("Введите восьмеричное число: ");


string z = Console.ReadLine();
int z1 = Convert.ToInt32(z,8);
string z2 = Convert.ToString(z1, 2);
Console.WriteLine("В двоичной системе это: " + z2);

Console.Write("Введите десятичное число: ");


int i = Convert.ToInt32(Console.ReadLine());
string s = Convert.ToString(i, 2);
Console.WriteLine("В двоичной системе счисления это: " + s);
string s1 = Convert.ToString(i, 8);
Console.WriteLine("В восьмеричной системе счисления это: " + s1);
string s2 = Convert.ToString(i, 16);
Console.WriteLine("В шестнадцатеричной системе счисления это: " + s2);
Console.ReadLine();
}
Результат:
В десятичной системе 0b1001 = 9
В десятичной системе 0x10 = 16
Введите восьмеричное число: 12
В двоичной системе это: 1010
Введите десятичное число: 124
В двоичной системе счисления это: 1111100
В восьмеричной системе счисления это: 174
В шестнадцатеричной системе счисления это: 7c

2. Смешанные СС
2.1. Двоично-десятичная
Каждая десятичная цифра представляется в двоичном коде. Например,
десятичное число 839 в двоично-десятичном представлении имеет вид
:
⏟ ⏟ ⏟

2.2. Система представления времени и даты


Время и дата 21:15:40.128 12.05.2019 имеют несколько смешанных
систем:
Часы: 24-10 СС
Минуты и секунды: 60-10 СС
Дробная часть секунд: 10 СС
День: 31-10 (вплоть до 28-10) СС
Месяц: 12-10 СС
Год: 10 СС
2.3. Система представления плоских и телесных углов
Плоские углы:
Градус: 360-10 СС
Минуты и секунды: 60-10 СС
Дробная часть секунд: 10 СС
Телесные углы:
Телесный градус: 129600-10 СС
Телесная минута: 3600-10 СС
Телесная секунда: 3600-10 СС
2.4. Факториальная СС
Разложение в ряд по факториалам:

где .
Пример:

или
21 : 3! = 3, остаток 3
3 : 2! = 1, остаток 1
1 : 1! = 1, остаток 0
Ответ: 311!.
Пример:

или
49 : 4! = 2, остаток 1
1 : 3! = 0, остаток 1
1 : 2! = 0, остаток 1
1 : 1! = 1, остаток 0
Ответ: 2001!.
2.5. Полиадическая СС
Разложение по произведениям выбранных взаимно простых оснований:

Пример. Пусть , , .

2.6. Фибоначчиева СС
Алфавитом системы является последовательность Фибоначчи 1, 2, 3, 5,
8, 13, … Весовые коэффициенты полинома принадлежат множеству {0, 1}.
Теорема Цекендорфа утверждает, что любое натуральное число N
можно представить единственным образом в виде суммы чисел Фибоначчи
(0,1,1,2,3,5,8,13,21…):

где , , , т.е. в записи нельзя использовать два


соседних числа Фибоначчи. Такая запись числа называется минимальной
формой. Младший разряд F2 = 1. Разряды F0 и F1 не используются. Отсюда
следует, что любое число можно однозначно записать в минимальной форме
фибоначчиевой СС, например:

В развёрнутой форме допускается следование двух единиц подряд.


Примеры развёрнутых форм

Нетрудно получить и правило инкремента в фибоначчиевой системе


счисления: если младшая цифра равна 0, то её заменяем на 1, а если равна 1
(т.е. в конце стоит 01), то 01 заменяем на 10. Затем "исправляем" запись,
последовательно исправляя везде 011 на 100. В результате за линейное время
будет получена запись нового числа.
Перевод числа в фибоначчиеву систему счисления осуществляется
жадным алгоритмом: перебираем числа Фибоначчи от бóльших к меньшим и,
если некоторое , то входит в запись числа N, и мы отнимаем от
N и продолжаем поиск.
3. Непозиционная CC
Унарная (единичная) СС. Используется, например, для задания
исходных данных в машине Тьюринга и других вычислительных моделях.
Пример.

4. Негапозиционная CC
Негапозиционная CC использует отрицательное основание. В ней не
нужен знак минус для представления отрицательных чисел.
СС с основанием -10 называется нега-десятичной СС:

∑ ( )

Используются также нега-троичная и нега-двоичная СС.


Пример перевода чисел из нега-десятичной и из нега-двоичной СС в
десятичную СС:
( ) ( ) ( )
( ) ( )
( ) ( ) ( ) ( )

ЛР 2. Прикладные системы счисления


Задачи.
1. Запишите десятичное число 5 в одноарной (унарной) СС.
2. Какое наибольшее двоичное вещественное число, содержащее 4
разряда дробной части, меньше единицы?
3. Каково наименьшее шестнадцатеричное вещественное число
большее нуля, содержащее 4 разряда дробной части?
4. Как быстро перевести восьмеричное насыщенное число 778 в
десятичную СС?
5. Какие максимальные целые числа представимы в 32-разрядном, 64-
разрядном и 128-разрядном компьютерах?
6. Переведите десятичные вещественные числа в двоичные:
а) 8,125
б) 10,875
7. Напишите программу на языке C# для ввода с клавиатуры двух
чисел в 16-ричном коде и вывода на экран их суммы в двоичном коде.

Вам также может понравиться