Перевод чисел из одной системы счисления в другую
Перевод чисел в десятичную систему осуществляется путём составления степенного ряда (2) с основанием той системы, из которой число переводится. Затем подсчитывается значение суммы.
Пример.
10101101,101(2) = 1·27 + 0·26 + 1·25 + 0·24 + 1·23 + 1·22 + 0·21 + 1·20 + +1·2-1 + 0·2-2 + 1·2-3 = 173,625(10).
Перевод целых десятичных чисел в недесятичную систему счисления осуществляется последовательным делением десятичного числа на основании той системы, в которую оно переводится, до тех пор, пока не получится частное, меньшее этого основания. Число в новой системе записывается в виде остатков деления, начиная с последнего.
Перевод правильных дробей из десятичной системы счисления в недесятичную.Для перевода правильной десятичной дроби в другую систему эту дробь надо последовательно умножать на основание той системы, в которую она переводится. При этом умножаются только дробные части. Дробь в новой системе записывается в виде целых частей произведений, начиная с первого.
Замечание. Конечной десятичной дроби может соответствовать бесконечная (периодическая) дробь в недесятичной системе счисления. В этом случае количество знаков в представлении дроби в новой системе берётся в зависимости от требуемой точности.
Для перевода неправильной десятичной дроби в систему счисления с недесятичным основанием необходимо отдельно перевести целую часть и отдельно дробную.
Необходимо отметить, что целые числа остаются целыми, а правильные дроби – дробями в любой системе счисления.
Для перевода восьмеричного или шестнадцатеричного числа в двоичную формудостаточно заменить каждую цифру этого числа соответствующим трёхразрядным двоичным числом (триадой) – для восьмеричной системы счисления или четырёхразрядным двоичным числом (тетрадой) – для шестнадцатеричной системы счисления (табл. 1), после чего отбрасывают незначащие нули в старших и младших разрядах.
Для перехода от двоичной к восьмеричной (шестнадцатеричной) системе поступают следующим образом: двигаясь от десятичной точки влево и вправо, разбивают двоичное число на группы по три (четыре) разряда, дополняя при необходимости нулями крайние левую и правую группы. Затем триаду (тетраду) заменяют соответствующей восьмеричной (шестнадцатеричной) цифрой (табл. 1).
Таблица 1
Представление чисел в различных системах счисления
Десятичная, основание 10 (Dec)
| Римская
| Двоичная, основание 2 (Bin)
| Восьмеричная, основание 8 (Oct)
| Двоичная
(триады)
| Шестнадцатеричная, основание 16 (Hex)
| Двоичная
(тетрады)
|
|
|
|
|
|
|
|
| I
|
|
|
|
|
|
| II
|
|
|
|
|
|
| III
|
|
|
|
|
|
| IV
|
|
|
|
|
|
| V
|
|
|
|
|
|
| VI
|
|
|
|
|
|
| VII
|
|
|
|
|
|
| VIII
|
|
| 001 000
|
|
|
| IX
|
|
| 001 001
|
|
|
| X
|
|
| 001 010
| A
|
|
| XI
|
|
| 001 011
| B
|
|
| XII
|
|
| 001 100
| C
|
|
| XIII
|
|
| 001 101
| D
|
|
| XIV
|
|
| 001 110
| E
|
|
| XV
|
|
| 001 111
| F
|
|
| XVI
|
|
| 010 000
|
| 0001 0000
|
| XVII
|
|
| 010 001
|
| 0001 0001
| Перевод из восьмеричной в шестнадцатеричную систему и обратно удобно осуществлять через двоичную систему с помощью триад и тетрад.
Двоичная арифметика
Правила выполнения арифметических действий над двоичными числами такие же, как и в десятичной системе, и задаются таблицами двоичного сложения, вычитания и умножения (табл. 2). Таблицы для восьмеричной и шестнадцатеричной систем счисления приведены в приложении к пособию [9].
Таблица 2
Арифметические действия над двоичными числами
Таблица
двоичного сложения
| Таблица
двоичного вычитания
| Таблица
двоичного умножения
| 0+0=0
0+1=1
1+0=1
1+1=10
| 0-0=0
1-0=1
1-1=0
10-1=1
| 0×0=0
0×1=0
1×0=0
1×1=1
| При сложении двоичных чисел производится сложение цифр слагаемых в каждом разряде и единиц переноса из соседнего младшего разряда, если они имеются. При этом необходимо учитывать, что в двоичной системе переполнение разряда наступает при количестве единиц, больше либо равным двум. В случае переполнения нужно вычесть из текущего разряда число, равное основанию системы (в данном случае – двойку), и добавить единицу переноса в следующий старший разряд.
При вычитании двоичных чисел, аналогично вычитанию десятичных, может возникнуть необходимость займа единицы из предыдущего старшего разряда. Эта занимаемая единица переносится в текущий разряд как двойка (количество единиц, равное основанию).
Операции умножения и деления в двоичной системе счисления аппаратно реализовать проще, чем в десятичной системе. Их выполнение сводится к операциям сложения (вычитания) и сдвигу.
Представление чисел в ЭВМ
В цифровых ЭВМ числовая информация представляется в двух формах:
- с фиксированной точкой (естественная форма);
- с плавающей точкой (экспоненциальная форма).
При представлении чисел с фиксированной точкой подразумевается, что положение точки, разделяющей число на целую и дробную части, неизменно для всех чисел. Эта форма наиболее проста, естественна, но имеет небольшой диапазон представления чисел и поэтому не всегда приемлема при вычислениях. В современных ЭВМ естественная форма используется, например, для представления целых чисел (дробная часть числа всегда отсутствует), денежных сумм (дробная часть всегда составляет четыре знака).
Представление с плавающей точкой любого числа N в общем виде описывается следующей формулой:
N = ± M × p±k,(3.3)
где ±M – мантисса (дробная часть) числа; p – основание системы счисления; ±k – порядок (целое число), при этом положительный знак мантиссы и порядка может опускаться, а при указании порядка в десятичной системе принято использовать символ Е. Например, десятичное число с фиксированной точкой 123,45 может быть представлено в форме с плавающей точкой как 0,12345 × 103, или, как это принято, 1,2345Е+02. Такая форма представления имеет огромный диапазон отображения чисел и является основной в современных ЭВМ.
Для представления положительных и отрицательных чисел в машинах используются специальные коды: прямой, обратный и дополнительный. Причём два последних позволяют заменить неудобную для ЭВМ операцию вычитания на операцию сложения с отрицательным числом; дополнительный код обеспечивает более быстрое выполнение операций при помощи сумматора, поэтому в ЭВМ применяется чаще именно он. Рассмотрим правила кодирования на примере целых чисел.
Для перевода числа в прямой код знак числа опускается, а в старший (знаковый) разряд ставится 0, если число положительное, и 1 – если число отрицательное. Младшие разряды кода являются двоичным представлением модуля числа. Оставшиеся разряды кода заполняются нулями. Отметим, что перевод положительных чисел в прямой, обратный и дополнительный код не изменяет изображения этих чисел (табл. 3).
Для перевода отрицательного числа в обратный код необходимо все разряды прямого кода, кроме знакового, инвертировать (заменить нули единицами, а единицы – нулями).
Для перевода отрицательного числа в дополнительный код необходимо к младшему разряду его обратного кода прибавить единицу.
Перевод отрицательного числа из дополнительного кода в прямой осуществляется в обратной последовательности: сначала вычитается единица, затем инвертируются разряды. Отметим, что положительное число (0 в старшем разряде) обратному переводу не подвергается, и имеет одинаковую запись как в прямом коде, так и в дополнительном.
Таблица 3
Примеры представления целых чисел
в шестнадцатиразрядных двоичных кодах
Число
| Прямой код
| Обратный код
| Дополнительный код
|
| 0000 0000 0000 0000
| 0000 0000 0000 0000
| 0000 0000 0000 0000
|
| 0000 0000 0000 0001
| 0000 0000 0000 0001
| 0000 0000 0000 0001
| -1
| 1000 0000 0000 0001
| 1111 1111 1111 1110
| 1111 1111 1111 1111
|
| 0000 0000 0001 0100
| 0000 0000 0001 0100
| 0000 0000 0001 0100
| -20
| 1000 0000 0001 0100
| 1111 1111 1110 1011
| 1111 1111 1110 1100
|
При написании программ важно определить диапазоны значений и формы представления обрабатываемой информации. Например, в языках программирования семейства BASIC (Бейсик) типы переменных INTEGER и LONG используются, соответственно, для хранения целых чисел со знаком в шестнадцатиразрядном (два байта, или полуслово) и тридцатидвухразрядном (четыре байта, или машинное слово) дополнительном коде.
Знак числа фиксируется в нулевом бите первого байта (крайний левый бит). Цифровая часть числа хранится в остальных битах поля числа, причём младший двоичный разряд числа находится в последнем, правом бите последнего байта. Переменные типа SINGLE и DOUBLE используются для хранения чисел с плавающей точкой в четырёх или восьми байтах (двойное слово) соответственно.
Знак хранится в нулевом бите, биты 1–7 отводятся под порядок числа, остальные биты используются для разрядов мантиссы. Как правило, мантисса хранится в нормальном виде, т.е. первым её разрядом не является 0.
Для упрощения операций над n-разрядными порядками чисел с плавающей запятой используется смещённый код, или так называемый код с избытком 2n-1. То есть значения диапазона [-2n-1; 2n-1-1] смещаются в диапазон [0; 2n-1], что позволяет работать с порядками как с целыми без знака.
В различных преобразовательных устройствах (для кодирования положений валов, дисков и т.п.) широко используется код Грея (табл. 4). Главная особенность кода – соседние кодовые слова различаются только в одном разряде. Поэтому при последовательном переходе от числа к числу погрешность считывания не превосходит единицы младшего разряда независимо от того, в каком разряде имела место неопределённость. Для перевода числа из кода Грея в обычный двоичный код все нули и первую единицу со стороны старших разрядов оставляют без изменения. Каждый последующий разряд либо инвертируется, если число предшествующих единиц нечётно, либо остаётся без изменения.
Таблица 4
Представление десятичных чисел в четырёхразрядном коде Грея
Десятичное число
| Двоичный код
| Код Грея
| Десятичное число
| Двоичный код
| Код Грея
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|