Введение

Внутреннее представление числовых значений в цифровом компьютере

Формат компьютерного числа – это внутреннее представление числовых значений в аппаратном и программном обеспечении цифрового устройства, такого как программируемые компьютеры и калькуляторы. Числовые значения хранятся в виде групп битов, например, байтов и слов. Кодировка, связывающая числовые значения и битовые шаблоны, выбирается для удобства работы компьютера; кодировка, используемая набором инструкций компьютера, как правило, требует преобразования для внешнего использования, например, для печати и отображения. Различные типы процессоров могут использовать разные внутренние представления числовых значений, и для целых и вещественных чисел применяются различные соглашения. Большинство вычислений выполняется с использованием форматов чисел, которые помещаются в регистр процессора, но некоторые программные системы позволяют представлять произвольно большие числа, используя несколько слов памяти.

Октальные и гексадецимальные цифры

Октальное и шестнадцатеричное кодирование – удобные способы представления двоичных чисел, используемые компьютерами. Компьютерным инженерам часто требуется записывать двоичные величины, но на практике запись двоичного числа, такого как 1001001101010001, утомительна и чревата ошибками. Поэтому двоичные величины записываются в системе с основанием 8, или "октальной", или, гораздо чаще, в системе с основанием 16, "шестнадцатеричной" (hex). В десятичной системе есть 10 цифр, от 0 до 9, которые комбинируются для формирования чисел. В октальной системе есть только 8 цифр, от 0 до 7. То есть, значение октального "10" равно десятичному "8", октального "20" – десятичному "16" и так далее. В шестнадцатеричной системе есть 16 цифр, от 0 до 9, за которыми, по соглашению, следуют буквы от A до F. То есть, шестнадцатеричное "10" равно десятичному "16", а шестнадцатеричное "20" – десятичному "32". Пример и сравнение чисел в различных системах счисления приведены в таблице ниже. При вводе чисел используются символы форматирования для указания системы счисления, например, 000 0000B или 0b000 00000 для двоичных чисел и 0F8H или 0xf8 для шестнадцатеричных чисел.

Числа фиксированной точки

Форматирование с фиксированной точкой может быть полезно для представления дробей в двоичном виде. Количество битов, необходимое для желаемой точности и диапазона, должно быть выбрано для хранения дробной и целой частей числа. Например, используя 32-битный формат, 16 бит могут быть использованы для целой части и 16 для дробной. За битом 8 следует бит 4, затем бит 2, затем бит 1. Дробные биты продолжают закономерность, заданную целыми битами. Следующий бит – это бит ½, затем бит ¼, затем бит ⅛, и так далее. Например:
биты целой части биты дробной части 0.500 = = 00000000 00000000.10000000 00000000 1.250 == 00000000 00000001.01000000 00000000 7.375 == 00000000 00000111.01100000 00000000
Эта форма кодирования не может представить некоторые значения в двоичном виде. Например, для дроби 0.2 в десятичной системе, наиболее близкие приближения будут следующими:
13107 / 65536 = 00000000 00000000.00110011 00110011 = 0.1999969 в десятичной системе 13108 / 65536 = 00000000 00000000.00110011 00110100 = 0.2000122 в десятичной системе

Даже если использовать больше знаков, точное представление невозможно. Число, записанное в десятичной системе как 0.333333333, продолжается бесконечно. Если его прервать преждевременно, значение не будет точным.

Числа в языках программирования

Программирование на языке ассемблера требует от программиста отслеживать представление чисел. Если процессор не поддерживает необходимую математическую операцию, программист должен разработать подходящий алгоритм и последовательность инструкций для её выполнения; на некоторых микропроцессорах даже целочисленное умножение приходится выполнять программно. Языки программирования высокого уровня, такие как Ruby и Python, предоставляют абстрактное число, которое может быть расширенным типом, например, рациональным числом, биг-интом или комплексным числом. Математические операции выполняются библиотечными функциями, предоставляемыми реализацией языка. Определенный математический символ в исходном коде, благодаря перегрузке операторов, вызывает различный машинный код, соответствующий представлению числового типа; математические операции над любым числом – будь то знаковое, беззнаковое, рациональное, с плавающей точкой, с фиксированной точкой, целое или комплексное – записываются одинаково. Некоторые языки, такие как REXX и Java, предоставляют операции с десятичной точкой с плавающей запятой, которые приводят к ошибкам округления другого типа.