С целью унификации приемов и методов работы с данными применяются различные типы кодирования. Одним из методов кодирования информации являются системы счисления.
В вычислительной технике применяется универсальная система кодирования данных, называемая двоичным кодом. Элементарной единицей представления данных в двоичном коде является двоичный разряд - бит. В машинно-ориентированных разделах программирования широко используются шестнадцатеричные обозначения. Знание систем счисления полезно для понимания представления данных в памяти ЭВМ и операций над ними.
Системы счисления (СС)
Системы счисления – правила исчисления чисел. В любой СС для представления чисел выбираются некоторые символы, называемые базисными числами.
В современном мире наиболее распространенным является представление чисел посредством арабских цифр 0, 1 … 9.
СС различаются выбором базисных чисел и правилами образования из них остальных чисел.
Например, в римской СС базисными являются числа 1, 5, 10, 50, 100, 500, 1000, обозначаемые знаками I, V, X, L, C, D, M, а другие получаются путем сложения и вычитания базисных: если цифра справа меньше или равна цифре слева, то эти цифры складываются; цифра слева меньше, чем равна цифра справа, то левая цифра вычитается из правой. Например, 146 ® C XL VI (100 40 6).
СС, в которых любое число получается путем сложения или вычитания базисных чисел, называются аддитивными.
Римская СС также относится к непозиционным СС, в которых значение цифры определяется конфигурацией цифрового символа.
Для больших чисел такие системы не удобны. В этой ситуации преимущественнее оказываются позиционные СС. В них значение каждой цифры изменяется в зависимости от ее положения (позиции) в последовательности цифр, изображающих число (каждый разряд имеет вес, равный степени основания).
Любое действительное число, записанное в позиционной СС с основанием q, может быть представлено как разложение по степеням основания этой системы:
Перевод чисел из десятичной системы счисления в систему с основанием P>1 осуществляется по следующему алгоритму:
- если переводится целая часть числа, то она делится на Р, после чего запоминается остаток от деления. Полученное частное вновь делится на Р, остаток запоминается. Процедура продолжается до тех пор, пока частное не станет равным нулю. Остатки от деления на Р выписываются в порядке, обратном их получению;
- если переводится дробная часть числа, то она умножается на Р, после чего целая часть запоминается и отбрасывается. Вновь полученная дробная часть умножается на Р и т.д. Процедура продолжается до тех пор, пока дробная часть не станет равном нулю. Целые части выписываются после двоичной запятой в порядке их получения.
Результатом может быть либо конечная, либо периодическая двоичная дробь. Поэтому, когда дробь является периодической, приходится обрывать умножение на каком-либо шаге и довольствоваться приближенной записью исходного числа в системе с основанием Р.
Пример 1. Перевод чисел из десятичной системы счисления в двоичную и шестнадцатеричную СС.
1714(10) 380,1875(10) 115,94(10)
1714:10=171
ост. 4
171:10=17
ост. 1
17:10=1
ост. 7
1:10=0
ост.1
в шестнадцатеричную
2638:16=164
ост. 14
е
164:16=10
ост. 4
10:16=0
ост. 10
а
263810 = а4е 16
Если необходимо перевести число из двоичной системы счисления в систему счисления, основанием которой является степень двойки, достаточно объединить цифры двоичного числа в группы по столько цифр, каков показатель степени, и использовать следующий алгоритм. Например, если перевод осуществляется в восьмеричную систему, то группы будут содержать три цифры (8 = 23). В целой части числа группировка производится справа налево, в дробной части – слева направо. Если в последней группе недостает цифр, дописываются нули: в целой части – слева, в дробной – справа. Затем каждая группа заменяется соответствующей цифрой новой системы.
Пример 2. Переведем из двоичной системы в шестнадцатеричную числа 1111010101,11(2), 1101001(2), 1111100(2), а также 1101001(2) в восьмеричную СС.
001111010101,1100(2) = 3D5,C(16)
0110|1001 = 69 h 0111|1100 = 7c h 001|101|001 = 151 8
6 9 7 c 1 5 1
Таблица 1 – Соответствия систем счисления
Десятичная
Двоичная
Шестнадцатеричная
Восьмеричная
a
b
c
d
e
f
При переводе чисел из системы счисления с основанием Р в десятичную систему счисления необходимо пронумеровать разряды целой части справа налево, начиная с нулевого, и дробной части, начиная с разряда сразу после запятой, слева направо (начальный номер – 1). Затем вычислить сумму произведений соответствующих значений разрядов на основание системы счисления в степени, равной номеру разряда.
Пример 3.Перевести данное число в десятичную систему счисления:
Правила вычитания в двоичной системе путем сложения дополнительных кодов:
1) преобразовать отрицательное число из формы со знаком в дополнительный код;
2) выполнить операцию двоичного сложения над всеми разрядами, включая знаковый, игнорируя единицу переноса из самого высокого разряда;
3) при равенстве единице знакового разряда суммы, что означает получение отрицательного результата в форме дополнительного кода, необходимо перевести результат в знаковую форму, используя второе свойство дополнений.