Кодирование данных двоичным кодом
Для автоматизации работы с данными, относящимися к различным типам, очень важно унифицировать их форму представления – для этого обычно используется прием кодирования, то есть выражение данных одного типа через данные другого типа. Естественные человеческие языки –это не что иное, как системы кодирования понятий для выражения мыслей посредством речи. К языкам близко примыкают азбуки (системы кодирования компонентов языка с помощью графических символов). История знает интересные, хотя и безуспешные попытки создания «универсальных» языков и азбук. По-видимому, безуспешность попыток их внедрения связана с тем, что национальные и социальные образования естественным образом понимают, что изменение системы кодирования общественных данных непременно приводит к изменению общественных методов (то есть норм права и морали), а это может быть связано с социальными потрясениями.
Та же проблема универсального средства кодирования достаточно успешно реализуется в отдельных отраслях техники, науки и культуры. В качестве примеров можно привести систему записи математических выражений, телеграфную азбуку, морскую флажковую азбуку, систему Брайля для слепых и многое другое (рисунок 1.2).
Рисунок 1.2 – Примеры различных систем кодирования
Своя система существует и в вычислительной технике – она называется двоичным кодированием и основана на представлении данных последовательностью всего двух знаков: 0 и 1. Эти знаки называются двоичными цифрами, по-английски – binary digit или, сокращенно, bit (бит).
Одним битом могут быть выражены два понятия: 0 или 1 (да или нет, черное или белое, истина или ложь и т. п.). Если количество битов увеличить до двух, то уже можно выразить четыре различных понятия:
00 01 10 11
Тремя битами можно закодировать восемь различных значений:
000 001 010 011 100 101 110 111
Увеличивая на единицу количество разрядов в системе двоичного кодирования, мы увеличиваем в два раза количество значений, которое может быть выражено в данной системе, то есть общая формула имеет вид:
N =2 m,
где N – количество независимых кодируемых значений;
т – разрядность двоичного кодирования, принятая в данной системе.
Формы представления чисел
В ЭВМ применяются две основные формы представления чисел: натуральная с фиксированным положением запятой и полулогарифмическая с плавающей запятой.
При представлении чисел с фиксированной запятой положение запятой закрепляется в определенном месте относительно разрядов числа и сохраняется неизменным для всех чисел, которые изображаются в данной разрядной сетке. Обычно запятая фиксируется перед первым (старшим) разрядом и в разрядной сетке могут быть представлены только числа, которые по модулю меньше 1. Для кодирования знака двоичного числа используется старший («знаковый») разряд («0» – «+», «1» – «–»).
Недостатками представления чисел с фиксированной запятой являются:
· необходимость предшествующего расчета и введения масштабных коэффициентов для исключения возможности переполнения разрядной сетки (т.е. когда число по модулю превышает единицу), а также потери младших разрядов (т.е. когда число по модулю меньше единицы младшего разряда);
· зависимость относительной точности от значения поступающих чисел. Максимальная относительная точность достигается при выполнении действий над максимально возможными числами.
Преимуществом является простота и высокое быстродействие выполнения операций.
Использование представления чисел с фиксированной запятой позволяет упростить схемы машины, повысить ее быстродействие, но представляет определенные трудности для программирования. Поэтому представление чисел с фиксированной запятой используется как основное только в микроконтроллерах.
В универсальных ЭВМ основным является представление чисел с плавающей запятой. Представление числа с плавающей запятой в общем случае имеет вид:
A = m · qn,
где q – основание СС;
n – целое число, называемое порядком числа A;
m – мантисса числа A (| m | < 1).
Поскольку в ЭВМ применяется двоичная СС, то A = m ·2 n, причем порядок и мантисса представлены в двоичной форме.
Если в записи числа старшая цифра отлична от нуля, число считается нормализованным; если старшая цифра ноль – число не нормализовано. Нормализация чисел в процессе вычисления выполняется в ЭВМ автоматически. При этом мантисса числа сдвигается влево до момента появления в старшем разряде сетки ближайшей единицы с соответствующим уменьшением порядка числа. В случае переполнения разрядной сетки, например, при сложении нормализованных чисел одного порядка, проводится нормализация вправо на один разряд:
· 3.1415926 = 0,31415926·101;
· 0,00125 = 0,125·10-2.
Недостатком представления чисел с плавающей запятой является то, что для выполнения действий над числами с плавающей запятой необходимо проводить операции отдельно с мантиссами чисел и отдельно с порядками, что усложняет и замедляет выполнение операций. Преимущество – для ЭВМ с плавающей запятой диапазон представляемых чисел больше чем для ЭВМ с фиксированной запятой.
Для кодирования целых чисел от 0 до 255 достаточно иметь 8 разрядов двоичного кода (8 бит). Шестнадцать бит позволяют закодировать целые числа от 0 до 65535, а 24 бита – уже более 16,5 миллионов разных значений.
Для кодирования действительных чисел используют 80-разрядное кодирование
С целью упрощения схем вычитание в ЭВМ заменяется сложением специально построенных кодов чисел. Применяются прямой, обратный и дополнительный коды чисел (самостоятельно).