КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Кодирование чиселЧисла в тексте документов представляются в виде символов. Например, число 123 708 может быть представлено в виде шести символов, обозначающих цифры. Но в такой кодировке числа не могут участвовать в арифметических операциях. Поэтому в числовых массивах, предназначенных для расчетов, числа кодируются иначе. Например, целое число 123 708 в шестнадцатеричной и двоичной системах счисления можно записать так: 123708 = 1E33C (16) = 0001 1110 0011 0011 1100 (2). Рассматриваемые системы счисления являются позиционными: значение каждой цифры зависит от ее позиции в числе. Позиция 0 (крайняя справа в целой части числа) подразумевает умножение стоящей в ней цифры на основание системы, возведенное в степень 0. Цифра в позиции 1 должна быть умножена на основание системы, возведенное в степень 1 и т. д. Например, цифра 7 в десятичном представлении числа 123 708 находится во второй позиции и, следовательно, означает 7 . 102 = 700. Шестнадцатеричное представление числа 123 708 можно пояснить следующей записью: 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. Поскольку один из разрядов требуется для кодирования знака числа, то максимальное по модулю целое число, которое можно закодировать в двух байтах, равно 32 767 , а в четырех байтах – 2 147 483 647. При размещении целого числа на регистре арифметического устройства процессора число «прижимается» к правому краю регистра – считается, что десятичная точка зафиксирована справа от младшего разряда. Поэтому по способу представления целые числа называют еще числами с фиксированной точкой. Есть особенности кодирования отрицательных целых чисел. Отрицательные целые числа могут кодироваться в обратном или дополнительном коде. Обычно эти особенности поясняют на примере кодирования в одном байте небольших чисел. Запишем в одном байте, например, число 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, процессор сложит мантиссы и при необходимости нормализует результат, прижав его мантиссу к левому краю разрядной сетки с соответствующей коррекцией порядка. Критическим моментом в этой последовательности операций является денормализация меньшего слагаемого. В этот момент младшие разряды его мантиссы могут вытолкнуться из разрядной сетки, если она недостаточно велика, а это приведет к потере точности результата. Поэтому при выборе форматов накапливаемых и хранимых данных (например, в таблицах баз данных) специалист должен представлять диапазон значений признаков – параметров объектов, часто называемых атрибутами.
|