Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Кодирование чисел



Числа в тексте документов представляются в виде символов. Например, число 123708 может быть представлено в виде шести символов, обозначающих цифры. Но в такой кодировке числа не могут участвовать в арифметических операциях. Поэтому в числовых массивах, предназначенных для расчетов, числа кодируются иначе. Например, целое число 123708 в шестнадцатеричной и двоичной системах счисления можно записать так:

123708 = 1E33C (16) = 0001 1110 0011 0011 1100 (2)

Рассматриваемые системы счисления являются позиционными: значение каждой цифры зависит от ее позиции в числе. Позиция 0 (крайняя справа в целой части числа) подразумевает умножение стоящей в ней цифры на основание системы, возведенное в степень 0. Цифра в позиции 1 должна быть умножена на основание системы, возведенное в степень 1 и т.д. Например, цифра 7 в десятичном представлении числа 123708 находится во второй позиции и, следовательно, означает 7 . 102 = 700. Шестнадцатеричное представление числа 123708 можно пояснить следующей записью:

1E33C (16) = 1*16 4 + 14*16 3 + 3*16 2 + 3*16 1 +12*16 0 = 65536+57344+768+48+12 =123708

От шестнадцатеричной записи очень легко перейти к двоичной, заменив каждую шестнадцатеричную цифру четырьмя двоичными согласно таблице 3.1.

Целые числа обычно хранятся в двухбайтовом (Integer - целое) или четырехбайтовом (Long – длинное целое) формате. В n байтах можно отобразить целое положительное число от 0 до 256 n - 1. Поскольку один из разрядов требуется для кодирования знака числа, то максимальное по модулю целое число, которое можно закодировать в двух байтах, равно 32767, а в четырех байтах - 2147483647. При размещении целого числа на регистре арифметического устройства процессора число «прижимается» к правому краю регистра – считается, что десятичная точка зафиксирована справа от младшего разряда. Поэтому по способу представления целые числа называют еще числами с фиксированной точкой.

Есть особенности кодирования отрицательных целых чисел. Отрицательные целые числа могут кодироваться в обратном или дополнительном коде. Обычно эти особенности поясняют на примере кодирования в одном байте небольших чисел. Запишем в одном байте, например, число 17(10) = 21(8) = 010001(2). При этом знаковый разряд для наглядности будем отделять от остальных семи разрядов запятой. Тогда положительное число 010001(2) в восьмиразрядной сетке будет иметь вид:

0,0010001

В прямом коде то же самое по модулю, но отрицательное число имело бы вид:

1,0010001

Но в прямом коде отрицательные числа не хранят. Даже если нужно вычесть из одного положительного числа другое положительное, то второе число представляется процессором в обратном или в дополнительном коде (в зависимости от конструкции процессора) и затем складывается с первым, т.е. операция вычитания фактически в процессорах не используется. Если применяется обратный код, то все разряды, кроме знакового, инвертируются:

1,1101110

Если же применяется дополнительный код, то ещё добавляется 1 в младший разряд:

1,1101111

Действительные числа кодируются сложнее. По способу представления в разрядной сетке их называют числами с плавающей точкой. Такие числа обычно хранятся в четырехбайтовом (Single – одинарная точность) или в восьмибайтовом (Double – двойная точность) формате. В первом байте кодируются знак числа, знак его порядка и сам порядок, а в остальных байтах мантисса. Например, если бы число 19705.0001 представлялось в разрядной сетке в десятичной системе счисления, то его порядок был бы равен 5, а мантисса 0.197050001, т.е.

19705.0001 = 105. 0.197050001

Мантисса в разрядной сетке арифметического устройства как бы прижимается к левому краю, причем ноль перед десятичной точкой и сама точка в разрядную сетку не заносятся, а только подразумеваются. Человек, имеющий дело с вычислениями, должен представлять себе, как такие числа складываются и вычитаются. Пусть к рассмотренному уже числу требуется прибавить число 0.0001. В нормализованном виде, т.е. с порядком и мантиссой, прижатой к левому краю разрядной сетки, оно будет иметь вид 10-3. 0.1. Чтобы сложить наши числа, процессор сначала увеличит порядок второго числа до 5, сдвинув мантиссу вправо на 8 разрядов, т.е. денормализует второе число с целью выравнивания порядков. Теперь, когда это число примет вид:

105. 0.000000001

Процессор сложит мантиссы и при необходимости нормализует результат, прижав его мантиссу к левому краю разрядной сетки с соответствующей коррекцией порядка. Критическим моментом в этой последовательности операций является денормализация меньшего слагаемого. В этот момент младшие разряды его мантиссы могут вытолкнуться из разрядной сетки, если она недостаточно велика, а это приведет к потере точности результата. Поэтому при выборе форматов накапливаемых и хранимых данных (например, в таблицах баз данных) специалист должен представлять диапазон значений признаков – параметров объектов, часто называемых атрибутами.





Дата публикования: 2014-11-03; Прочитано: 747 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...