- •Глава 2
- •2.1 Принципы построения систем счисления
- •2.1.1 Непозиционные системы счисления
- •2.1.2 Позиционные системы счисления
- •2.1.3 Специальные системы счисления
- •2.1.4 Выбор системы счисления
- •2.2 Виды позиционных систем счисления
- •Десятичная система счисления.
- •Двоично-десятичная система счисления
- •Восьмеричная и шестнадцатеричная системы счисления.
- •Восьмеричная система счисления
- •2.3 Перевод целых и дробных чисел из одной системы счисления в другую
- •Перевод числа из любой сс в десятичную сс
- •Перевод чисел из десятичной сс в любую другую сс
- •Перевод шестнадцатеричных чисел в десятичную сс.
- •Преобразования чисел, удобных для устных расчетов
- •Переводы чисел из одной системы в другую
- •2.4 Арифметические основы эвм
- •Арифметические операции, выполняемые в позиционных сс
- •Контрольные вопросы
- •2.4.2 Алгебраическое представление двоичных чисел
- •Контрольные вопросы
2.3 Перевод целых и дробных чисел из одной системы счисления в другую
В процессе тестирования и отладки программ программисту часто требуется перевести число из одной системы счисления в другую. Рассмотрим сначала перевод целых чисел в удобную систему счисления. Для человека такой системой счисления является, привычная для него, десятичная СС, а для машины — двоичная.
Перевод числа из любой сс в десятичную сс
Перевод с помощью алгоритма замещения.
Для перевода чисел из любой позиционной СС в десятичную можно воспользоваться представлением для смешанных чисел (2.2). Сначала в десятичную СС переводится основание той системы, из которой осуществляется перевод, а затем цифры исходного числа. Результаты подставляются в выражение (2.2). Напомним его:
А = an pn + an-1 pn-1 + an-2 pn-2 + … + a1 p1 + a0 p0 + a-1 p-1 + a-2 p-2 + … + a-m p-m
Полученная сумма дает искомый результат.
Примеры
Перевести в десятичную СС числа: С7(16), 1010(2) и 136(8):
а ) С7(16) = 12• 161 +7 • 160 = 192 + 7 = 199(10);
192 7
б) 1010(2) = 1• 23+0•22+1• 21 +0•20 = 1•8 + 1•2 = 8 + 2 = 10(10);
с) 136(8) = 1•82 + 3•81 + 6•80 = 64 + 24 + 6 = 94(10)
Перевод умножением (делением) на промежуточный результат
Целых чисел
Повторное умножение промежуточного результата на основание системы и сложение со значением разряда данного числа. Первый промежуточный разряд есть старший разряд числа.
Пример. Двоичное число 1101100 перевести в десятичное.
-первый промежуточный результат
1 ∙2 + 1 = 3 -2-й промежуточный результат
3∙ 2 + 0 = 6 -3-й промежуточный результат
6 ∙2 + 1 = 13 -4-й промежуточный результат
13 ∙2 + 1 = 27 -5-й промежуточный результат
27 ∙2 + 0 = 54 -6-й промежуточный результат
54 ∙2 + 0 = 108 Результат перевода 1101100(2) = 108(10)
Дробных чисел
Повторное деление промежуточного результата на основание системы и сложение с разрядом данного числа. Первый промежуточный результат есть последний разряд, разделенный на основание системы.
Пример. Перевести двоичную дробь 0,01011 в десятичную.
1 :2 = 0,5
(0,5 + 1) :2 = 0.75
(0.75 + 0) :2 = 0.375
(0.375 + 1) :2 = 0.6875
(0.6875 + 0) :2 = 0.34375 Результат перевода 0,01011(2) = 0.34375 = 0.34(10)
Перевод чисел из десятичной сс в любую другую сс
Рассмотрим теперь случай перевода в неудобную СС, когда все необходимые действия должны проводиться в старой десятичной системе счисления.
Следовательно, вычисления сводятся к последовательному целочисленному делению заданного числа на основание новой системы счисления.
Алгоритм перевода можно записать в виде следующей последовательности шагов:
Разделить в целых числах заданное число А на основание р в той системе, из которой переводят, и запомнить частное q и остаток а.
Если частное не равно нулю, то принять его за новое число и вернуться к шагу 1.
Если частное равно нулю, действия прекратить. Выписать остатки в порядке, обратном их получению, и принять их за цифры искомого числа. Арифметические действия по данному алгоритму производят в той системе счисления, из которой число переводят.
Перевод в двоичную систему счисления
Вычисления удобно проводить в форме, которая ясна из следующих примеров.
Примеры:
1. Перевести число 25(10) в двоичную систему счисления:
25 |_2 Выполняем последовательное деление 25 на 2
-24 12 |_2_
1 -12 6 |_ 2
0 -6 3 |_2_ Итак, 25 {10) = 11001 (2).
0 -2 1
1
Можно также использовать следующую упрощенную форму записи вычислений: деля последовательно на основание системы р заданное число А, в левом столбце записывается частное от деления, а в правом - соответствующий остаток.
2. Перевести число 32(10) и 7110 в двоичную СС.
32 | 2 0 71| 2 1
16 | 2 0 35| 2 1
8 | 2 0 7| 2 1
4 | 2 0 8| 2 0
2 | 2 0 4| 2 0
1 1 32 (10) =100000(2) 2| 2 0 71(10) = 1000111(2)
1
Перевод в шестнадцатеричную систему счисления
Рассмотрим примеры перевода чисел из десятичной СС в шестнадцатеричную с помощью алгоритма перевода, а полученного результата - снова в десятичную СС с помощью алгоритма замещения.
Примеры.
Перевести число 191(10) в шестнадцатеричную систему счисления и наоборот:
а) 191 | 16 Заменяем 11(10) на В(16), а 15(10) на F(l6). Итак, 191(10) = ВF(16).
-16_ 11
31
-16
15
6) BF(16) = (В • 161 + F • 16°) = (11 • 16 + 15 • 1) = (176 + 15) = 191(10).
Перевести число 1723(10) в шестнадцатеричную систему счисления и наоборот:
а) _1723 |16
16 _107 | 16
123 96 6
112 11
11 Итак, 1723(10) = 6ВВ(16)
б) 6ВВ(16) = (6•162 + В•161 + В•16°) = (1536 + 176 + 11) = 1723(10).
Перевод в восьмеричную систему счисления
Пример
Перевести число 1723(10) в восьмеричную систему счисления и наоборот:
а) _1723 |8
16 215 | 8
12 - 16 26 | 8_
8 55 - 24 3
43 - 48 2
- 40 7 Итак, 1723(10) = 3273(8);
3
б) 3273(8) = (3•83 + 2•82 + 7•81 + 3•80) = (1536 + 128 + 56 + 3) = 1723(10).