Главная страница «Первого сентября»Главная страница журнала «Информатика»Содержание №5/2009


Профильное обучение

Каким мне представляется профильный курс информатики

Продолжение. См. № 4/2009

§4. Смешанные системы счисления

Способ записи чисел, при котором числа из позиционной системы счисления с основанием Q записываются с помощью цифр системы счисления с основанием P, называется смешанной P-Q-ичной системой.

Примером смешанной системы является двоично-десятичная система счисления. В ней десятичное число записывается путем замены каждой цифры на 4-разрядный двоичный код. Таблица соответствия для двоично-десятичной системы следующая:

В этой таблице каждой десятичной цифре поставлено в соответствие равное ей четырехзначное двоичное число (нули слева — незначащие). Например, десятичное число 58236,37 в двоично-десятичной форме запишется так:
101 10001 0010 0011 0101,0011 01112–10. Первый слева ноль у целого числа является незначащей цифрой, поэтому его можно не писать.

Для обратного преобразования из двоично-десятичной формы в десятичное число нужно разбить на четверки все знаки двоичного кода: от запятой влево — в целой части и вправо — в дробной части. Затем каждую четверку двоичных цифр заменить на соответствующую десятичную цифру. Например:

11 1000 0010 1001 0011,0101 1001 1000 2–10 -> 3823,598

Отметим важное обстоятельство: между данными десятичным и двоично-десятичным числом нельзя поставить знак равенства. Двоично-десятичное представление — это всего лишь двоичный код для представления десятичного числа, но никак не равное ему значение в двоичной системе счисления. Выполнение арифметических вычислений над десятичными числами, представленными в двоично-десятичной форме, весьма затруднительно. Тем не менее в истории ЭВМ известны такие примеры. В первой ЭВМ под названием ENIAC использовалась двоично-десятичная система.

Современные компьютеры производят вычисления в двоичной системе счисления. Однако для представления компьютерной информации нередко используются двоично-восьмеричная и двоично-шестнадцатеричная системы.

Двоично-восьмеричная система. В следующей таблице представлено соответствие между восьмеричными цифрами и трехзначными двоичными числами (двоичными триадами), равными по значению этим цифрам.

Записать восьмеричное число в двоично-восьмеричном виде — это значит заменить каждую восьмеричную цифру на соответствующую двоичную триаду. Например:

3517,28 > 11 101 001 111,010 2–8.

А теперь переведем данное восьмеричное число в двоичную систему счисления. Для этого сначала переведем его в десятичную систему, а потом из десятичной в двоичную систему счисления. Вот что получается:

3517,2 8 = 1871,25 = 11101001111,012.

Но это тот же самый двоичный код, что записан выше в двоично-восьмеричной системе! Мы пришли к следующему результату: двоично-восьмеричное число равно значению данного восьмеричного числа в двоичной системе счисления.

Отсюда следует, что перевод чисел из восьмеричной системы счисления в двоичную производится перекодировкой по двоично-восьмеричной таблице путем замены каждой восьмеричной цифры на соответствующую двоичную триаду. А для перевода числа из двоичной системы в восьмеричную его цифры надо разбить на триады (начиная от запятой) и заменить каждую триаду на соответствующую восьмеричную цифру.

Двоично-шестнадцатеричная система счисления. В следующей таблице представлено соответствие между шестнадцатеричными цифрами и четырехзначными двоичными числами (двоичными тетрадами), равными по значению этим цифрам.

Записать шестнадцатеричное число в двоично-шестнадцатеричном виде — это значит заменить каждую шестнадцатеричную цифру на соответствующую двоичную тетраду. Например:

С81F,1D16 > 1100 1000 0001 1111,0001 11012–16

Переведем данное шестнадцатеричное число сначала в десятичную систему счисления, а затем в двоичную систему. Получим:

С81F,1D16 = 51231,875 =

= 1100 1000 0001 1111,0001 11012

Получился тот же самый двоичный код, что записан выше в двоично-шестнадцатеричной системе! Рассмотренный пример привел к следующему результату: двоично-шестнадцатеричное число равно значению данного шестнадцатеричного числа в двоичной системе счисления.

Следовательно, для перевода числа из шестнадцатеричной системы счисления в двоичную достаточно выполнить перекодировку по двоично-шестнадцатеричной таблице путем замены каждой шестнадцатеричной цифры на соответствующую двоичную тетраду. А для перевода числа из двоичной системы в шестнадцатеричную его цифры надо разбить на тетрады (начиная от запятой) и заменить каждую тетраду на соответствующую шестнадцатеричную цифру.

Можно ли на основании приведенных частных примеров делать глобальные выводы о том, что двоично-восьмеричный (двоично-шестнадцатеричный) код любого восьмеричного (шестнадцатеричного) числа совпадает с двоичным значением этого числа? Нет, конечно! Это утверждение требует доказательства. Такое доказательство существует1.

Доказано, что для любого числа в системе счисления с основанием p = 2n смешанный двоично-р-ичный код совпадает с представлением этого числа в двоичной системе счисления.

Поскольку 8 = 23, а 16 = 24, то сформулированное правило относится к восьмеричной и шестнадцатеричной системам. Очевидно, что такая же связь существует между двоичной и четверичной системами счисления, поскольку 4 = 22.

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

Задача. Перевести число 1369,75 в двоичную, восьмеричную и шестнадцатеричную системы счисления.

Наиболее рациональный способ решения задачи следующий. Нужно перевести это число в одну из трех систем с основанием 2, 8 или 16, а затем, используя связь между ними через смешанное представление, выполнить перевод в две другие системы путем перекодировки по таблицам 2–8 и 2–16.

1) Переведем число в восьмеричную систему путем последовательного деления на 8 целой части и последовательного умножения на 8 дробной части числа. Получим:

1369,75 = 2531,68

2) Путем перекодировки по двоично-восьмеричной таблице переведем это число в двоичную систему счисления:

2531,68 = 10 101 011 001,1102

3) Разделив цифры двоичного числа на тетрады (влево и вправо от запятой), переведем двоичное число в шестнадцатеричную систему, используя двоично-шестнадцатеричную таблицу:

0101 0101 1001,11002 = 559,С16

Вопросы и задания

1. Дайте определение смешанной системе счисления.

2. Почему двоично-десятичный код не совпадает с двоичным числом, равным данному десятичному числу?

3. Для каких целей в компьютерных технологиях используются восьмеричная и шестнадцатеричная системы счисления?

4. Выполните наиболее рациональным способом следующие переводы чисел: 537,158->X2; 537,158->X16; 10111011010101,010112->X8->Y16.

5. Напишите двоично-четверичную таблицу перекодировки.

6*. Постройте электронную таблицу для перевода четверичных чисел в двоичную систему счисления.

7**. Постройте электронную таблицу для перевода восьмеричных чисел в двоичную систему счисления.

8**. Напишите программу на Паскале перевода целого двоичного числа в восьмеричную систему счисления.

§5. Арифметика в позиционных системах счисления

Во всех позиционных системах счисления выполнение арифметических операций подчиняется одним и тем же законам: коммутативному, ассоциативному, дистрибутивному. В основе арифметических вычислений лежат правила сложения (таблица сложения) и правила умножения (таблица умножения) однозначных чисел.

Сложение и вычитание многозначных чисел в р-ичной системе производится столбиком по тому же алгоритму, что и для десятичных чисел. Соответствующие разряды слагаемых записываются друг под другом. Сложение производится поразрядно, начиная с младшего разряда. Если при суммировании цифр одного разряда сумма оказывается больше р–1 (двузначное число), то в данном разряде результата записывается младшая цифра суммы, а старшая цифра прибавляется к следующему по старшинству разряду (ближайшему слева).

Вычитание — обратная к сложению операция. Если в очередном разряде уменьшаемого стоит цифра меньшая, чем у вычитаемого, то занимается единица у ближайшего слева ненулевого разряда. В результате к вычисляемому разряду уменьшаемого добавляется р. Если единица занималась не у соседнего слева разряда, то к промежуточным разрядам добавляется р–1.

Умножение сводится к многократному сложению со сдвигом разрядов, а деление — к многократному вычитанию.

Двоичная арифметика. Вот как выглядят таблицы сложения и умножения в двоичной системе счисления:

Рассмотрим примеры выполнения четырех арифметических операций с двоичными числами.

Замечание: далее нижний индекс для обозначения системы счисления будет опускаться.

Пример 1. Сложение двоичных чисел. Маленькими цифрами сверху обозначены значения, переносимые при сложении в соседний слева разряд.

Пример 2. Вычитание двоичных чисел. Маленькими цифрами сверху обозначены значения, добавляемые к разряду в процессе переноса единицы из ближайшего ненулевого разряда слева.

Правильность полученного результата можно проверить путем сложения разности с вычитаемым. В результате должно получиться уменьшаемое.

Пример 3. Умножение двоичных чисел.

Пример 4. Деление двоичных чисел. В следующем примере делимым числом является произведение из предыдущего примера, делителем — второй сомножитель. Частное получилось равным первому сомножителю.

Двоичная арифметика — наиболее простая. Эта простота стала одной из причин использования двоичной системы счисления в компьютерах.

Арифметика в других системах счисления. Приведем примеры вычислений в других системах счисления. Рассмотрим пятеричную систему.

Таблица сложения пятеричной системы

Пример сложения и вычитания
пятеричных чисел

Таблица умножения пятеричной системы

Вычисления в системах счисления с основанием
p = 2n можно производить по такой же схеме, как это делалось выше: построить таблицы сложения и умножения и, заглядывая в эти таблицы, выполнять многозначные вычисления. Но можно пойти другим путем, используя связь таких систем с двоичной системой счисления. Алгоритм вычисления будет следующим:

1) перевести данные числа в двоичную систему счисления, используя таблицу двоичного представления цифр р-ичной системы;

2) выполнить вычисления с двоичными числами;

3) перевести полученное двоичное число в р-ю систему через ту же таблицу (п. 1).

Задача 1. Вычислить сумму двух шестнадцатеричных чисел: 3A8D,1F16 + 2C6,516.

Используем описанный выше алгоритм.

Задача 2. В среде электронной таблицы создать автоматически заполняемую таблицу умножения для восьмеричной системы счисления.

В режиме отображения значений электронная таблица будет иметь следующий вид:

Таблица создается в такой последовательности:

1. В ячейку D1 заносится число 8 — основание системы счисления. Поясняющий текст заносится в соседние ячейки первой строки.

2. В блок B3:H3 заносятся числа с 1 до 7.

3. В блок A4:А10 заносятся числа с 1 до 7.

4. В ячейку В4 заносится формула:

=ЦЕЛОЕ(B$3*$A4/$D$1)*10+ОСТАТ(B$3*$A4;$D$1)

5. Формула из ячейки В4 копируется в блок B4:H10.

Таблица готова!

Здесь используются две стандартные функции электронных таблиц:

ЦЕЛОЕ(число) — выделение целой части числа, стоящего в аргументе;

ОСТАТ(число; делитель) — остаток целочисленного деления (аналог операции mod в Паскале).

Учимся программировать

Задача 3. Создать программу на Паскале, выводящую на экран таблицу умножения в системе счисления с основанием p (2 < p 10).

Program Tabl_mul;

var X,Y,Z,p: integer;

begin

write('Input p (2 < p < = 10):');

readln(p); {Ввод основания системы}

writeln(P,'-system multiplication table');

{Изменение первого сомножителя}

for X := 1 to p - 1 do

begin

{Изменение второго сомножителя}

for Y := 1 to p - 1 do

begin

{Вычисление произведения и перевод

в р-ичную систему}

Z := (X * Y div p) * 10 + (X * Y) mod p;

{вывод произведения без перевода строки}

write(Z:3)

end;

writeln {перевод строки}

end

end.

В данной программе переменные X и Y принимают значения сомножителей, изменяющихся в диапазоне
от 1 до р – 1. Произведение X * Y может быть одно- или двузначным числом. Структура алгоритма — два вложенных цикла: внешний цикл — по переменной X, внутренний цикл — по переменной Y. “Пустой” оператор writeln используется для перехода к новой строке таблицы при выводе на экран после каждого окончания внутреннего цикла. Форматирование выводимого значения (Z:3) обеспечивает выделение под число трех позиций на экране. При использовании данной программы для построения восьмеричной таблицы умножения на экране получим:

Input p (2 < p <= 10): 8

8-system multiplication table

Вопросы и задания

1. Проверьте для двоичной системы счисления выполнение трех арифметических законов:

а) коммутативности: a + b = b + a; a · b = b · a;

б) дистрибутивности: c(a + b) = c · a + c · b;

в) ассоциативности:

(a + b) + c = a + (b + c); (ab)c = a(bc).

Выполните проверку на примере значений:

a = 1102, b = 10112, c = 112.

2. Сформулируйте вербально алгоритм сложения многозначных чисел в p-ичной позиционной системе счисления.

3. Постройте таблицы сложения и умножения для троичной системы счисления.

4. Используя результат предыдущего задания, выполните вычисления в троичной системе: 20113 + 21203; 11113 – 2013; 21123·123; 12103 : 203.

5. Используя смешанные системы “2–8” и “2–16”, выполните вычисления:

73564,3248 + 17654,1238; F19C5,7A16 – 4D2B,33C916.

6. Создайте электронную таблицу, приведенную в задаче 2. На ее основе получите таблицу умножения пятеричной системы счисления.

7. Создайте электронную таблицу сложения восьмеричных чисел. На ее основе получите таблицу сложения девятеричных чисел.

8. Реализуйте на компьютере программу на Паскале, приведенную в задаче 3. Проведите с ней расчеты для различных значений p: 3, 5, 9, 10.

9*. Составьте программу на Паскале для получения таблицы умножения в шестнадцатеричной системе счисления.


1 См.: Андреева Е.В., Босова Л.Л., Фалина И.Н. Математические основы информатики. М.: БИНОМ. Лаборатория знаний, 2007.

И.. Г.. Семакин

TopList