- •Министерство транспорта Российской Федерации
- •Введение
- •1. Теоретические сведения
- •1.1. Понятие о системах счисления
- •1.2. Представление чисел с помощью позиционных систем счисления
- •1.2.1. Десятичная система счисления
- •1.2.2. Системы счисления с произвольным основанием
- •Алфавиты некоторых систем счисления
- •1.3. Системы счисления, применяемые в компьютере
- •1.3.1. Двоичная система счисления и двоичное кодирование информации
- •1.3.2. Двоичная арифметика
- •1.3.3. Восьмеричная и шестнадцатеричная системы счисления
- •1.4. Перевод чисел из системы с произвольным основанием в десятичную систему счисления
- •1.5. Быстрый способ перевода чисел с помощью устного счета
- •1.6. Перевод чисел из десятичной системы счисления в систему с произвольным основанием
- •1.6.1. Перевод целых десятичных чисел
- •1.6.2. Перевод правильных десятичных дробей
- •1.6.3. Перевод десятичных чисел, содержащих целую и дробную части
- •1.6.4. Перевод правильных простых дробей
- •1.7. Перевод чисел из системы с основанием p в систему с основанием q
- •1.7.1. Общий случай
- •1.7.2. Поразрядные способы перевода чисел для систем с кратными основаниями
- •2. Примеры решения задач
- •Для перевода числа 1510 в двоичную систему счисления необходимо выполнить последовательное деление на 2 и выписывание остатков в порядке, обратном их получению (см. П. 1.6.1):
- •3. Задания
- •4. Контрольные вопросы
- •Системы счисления
- •644046, Г. Омск, пр. Маркса, 35
1.6. Перевод чисел из десятичной системы счисления в систему с произвольным основанием
1.6.1. Перевод целых десятичных чисел
Алгоритм перевода следующий. Сначала исходное число делится на основание новой системы р, затем получающиеся целые частные снова делятся на р. Действия выполняются в десятичной системе счисления. Деление проводится до получения в частном нуля. Выписываются все остатки, начиная с последнего остатка по первый включительно. Полученное число является записью заданного числа в новой системе.
Рассмотрим пример перевода целого числа 3610 из десятичной системы счисления в двоичную систему. Выполняется последовательное деление:
_ 36 | 2 0
36 _ 18 | 2 0
0 18 _ 9 | 2 0
0 8 _ 4 | 2 0
1 4 _ 2 | 2 0
0 2 _ 1 | 2 0
0 0 0
1
Ответ: А2= 1001002. Действительно, выполнив перевод полученного результата в десятичную систему, имеем: 1·25+ 0·24+ 0·23+1·22+0·21+ 0·20= 36.
1.6.2. Перевод правильных десятичных дробей
Алгоритм перевода следующий. Последовательно умножаем сначала исходное число, затем дробные части получаемых произведений на основание новой системы. При этом целые части получаемых произведений будут являться цифрами записи искомого числа в новой системе (начиная со старшей цифры). Процесс умножения выполняется до получения в дробной части нуля или до получения необходимого количества цифр.
Рассмотрим пример перевода правильной дроби 0,3610 из десятичной системы счисления в двоичную систему с точностью до пяти цифр после запятой. Выполним последовательное умножение:
0 | 36
| × 2
0 | 72
| × 2
1 | 44
| × 2
0 | 88
| × 2
1 | 76
| × 2
1 | 52
…….
Ответ: А2≈ 0,010112. Действительно, выполнив перевод полученного результата в десятичную систему, имеем: 0·2–1+ 1·2–2+ 0·2–3+ 1·2–4+ 1·2–5= = 0,34375.
Получили число, отличающееся от исходного числа 0,3610. Причина расхождения заключается в том, что при переводе было взято пять цифр после запятой. При увеличении количества значащих цифр сумма числового ряда была бы ближе к 0,3610.
Замечание 1. Следует отметить, что в двоичную систему счисления точно (без ошибки) переводятся только те числа, которые являются конечной суммой степеней числа 2, т. е. целые числа, а также числа 0,5 (2–1); 0,25 (2–2); 0,75 (2–1 + 2–2); 0,125 (2–3); 0,625 (2–1 + 2–3) и т. д. Например, число 0,110 = 0,0(0011)2, оно является бесконечной двоичной дробью с периодом (0011). Под любое число в памяти компьютера отводится заранее известное число битов, поэтому число 0,110 хранится в памяти с ошибкой, это приводит к тому, что если, например, в Basic-программе записан оператор заголовка цикла
for x = 1 to 2 step 0.1,
то предполагается, что переменная х принимает последовательный ряд значений: 1,0; 1,1; 1,2; …; 2,0. На самом деле только начальное значение х точно равно 1,0. Шаг 0,1 в памяти хранится приближенно, поэтому следующее значение х (после начального) уже будет равно не точно 1,1, а приблизительно 1,1. Прибавление приближенного значения шага к приближенному значению х только увеличит эту ошибку, поэтому последнее значение переменной х будет не точно, а приблизительно равно двум. Причем (из-за технической реализации) это значение может быть как немного меньше двух, так и немного больше двух. В первом случае последний раз цикл выполнится при х ≈ 2, так как это значение меньше двух. Во втором случае последний раз цикл выполнится при х ≈ 1,9, так как следующее значение х уже несколько больше двух, а цикл в данном примере должен выполняться при значениях переменной цикла х, не превышающих верхнее значение 2, заданное в заголовке цикла. Для того чтобы не потерять вычисления при последнем значении х ≈ 2, следует заголовок цикла записывать так:
for x = 1 to 2.01 step 0.1.