Формат номера компьютера - Computer number format

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

Представление двоичного числа

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

Таблица 1: двоичное в восьмеричное
Двоичная строка Восьмеричное значение
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
Таблица 2: Количество значений для битовой строки.
Длина битовой строки (b) Количество возможных значений (N)
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024
...

Бит представляет собой двоичный разряд , который представляет собой одно из двух состояний . Концепция бита может пониматься как значение 1 или 0 , включено или выключено , да или нет , истина или ложь , или закодировано переключателем или переключателем какого-либо типа.

Хотя один бит сам по себе может представлять только два значения, строка битов может использоваться для представления более крупных значений. Например, строка из трех битов может представлять до восьми различных значений, как показано в таблице 1.

По мере увеличения количества битов, составляющих строку, количество возможных комбинаций 0 и 1 увеличивается экспоненциально . Один бит допускает только две комбинации значений, два объединенных бита могут образовывать четыре отдельных значения, три бита - восемь и так далее, увеличиваясь по формуле 2 ^ n. Количество возможных комбинаций удваивается с добавлением каждой двоичной цифры, как показано в таблице 2.

Группы с определенным количеством битов используются для представления различных вещей и имеют определенные имена.

Байт является битовой строкой , содержащее число бит , необходимых для представления символа . На большинстве современных компьютеров это восьмибитная строка. Поскольку определение байта связано с количеством битов, составляющих символ, некоторые старые компьютеры использовали другую длину бит для своего байта. Во многих компьютерных архитектурах байт является наименьшей адресуемой единицей , скажем, атомом адресуемости. Например, даже несмотря на то, что 64-битные процессоры могут адресовать память по шестьдесят четыре бита за раз, они все же могут разбить эту память на восьмибитные части. Это называется памятью с байтовой адресацией. Исторически сложилось так, что многие процессоры считывают данные кратными восьми битам. Поскольку размер байта в восемь битов настолько распространен, но определение не стандартизировано, термин октет иногда используется для явного описания восьмибитовой последовательности.

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

Отображение восьмеричных и шестнадцатеричных чисел

Восьмеричное и шестнадцатеричное кодирование - удобные способы представления двоичных чисел, используемых компьютерами. Компьютерным инженерам часто приходится записывать двоичные числа, но на практике запись двоичного числа, такого как 1001001101010001, утомительна и подвержена ошибкам. Таким образом, двоичные величины записываются в восьмеричном, восьмеричном или, что гораздо чаще, в шестнадцатеричном ( шестнадцатеричном ) формате с основанием 16 . В десятичной системе есть 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 для шестнадцатеричных чисел.

Преобразование между базами

Таблица 3: Сравнение значений в разных базах
Десятичный Двоичный Восьмеричный Шестнадцатеричный
0 000000 00 00
1 000001 01 01
2 000010 02 02
3 000011 03 03
4 000100 04 04
5 000101 05 05
6 000110 06 06
7 000111 07 07
8 001000 10 08
9 001001 11 09
10 001010 12 0A
11 001011 13 0B
12 001100 14 0C
13 001101 15 0D
14 001110 16 0E
15 001111 17 0F

Каждая из этих систем счисления является позиционной системой, но в то время как десятичные веса являются степенями 10, восьмеричные веса являются степенями 8, а шестнадцатеричные веса - степенями 16. Для преобразования из шестнадцатеричного или восьмеричного в десятичный, для каждой цифры умножается значение цифры на значение ее позиции, а затем складывает результаты. Например:

Представление дробей в двоичном формате

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

Форматирование с фиксированной точкой может быть полезно для представления дробей в двоичном формате.

Количество битов, необходимых для требуемой точности и диапазона, должно быть выбрано для хранения дробной и целой частей числа. Например, используя 32-битный формат, можно использовать 16 бит для целого числа и 16 для дроби.

За битом восьмерки следует бит четверки, затем бит двойки, затем бит единицы. Дробные биты продолжают шаблон, установленный целыми битами. Следующий бит - это половина бит, затем четверть бит, затем бит и так далее. Например:

целые биты дробные биты
0,500 знак равно 1 / 2 знак равно 00000000 00000000.10000000 00000000
1,250 знак равно 1 + 1 / 4 знак равно 00000000 00000001.01000000 00000000
7,375 знак равно 7 + 3 / 8 знак равно 00000000 00000111.01100000 00000000

Эта форма кодирования не может представлять некоторые значения в двоичном формате. Например, дробь 1 / 5 , 0,2 в десятичной системе счисления, наиболее близкие приближения будут следующими:

13107/65536 знак равно 00000000 00000000.00110011 00110011 знак равно 0,1999969 ... в десятичной системе
13108/65536 знак равно 00000000 00000000.00110011 00110100 знак равно 0,2000122 ... в десятичной системе

Даже если используется больше цифр, точное представление невозможно. Номер 1 / 3 , записывается в десятичной форме как 0,333333333 ..., продолжается бесконечно. При досрочном прекращении значение не будет представлять 1 / 3 именно так.

Числа с плавающей запятой

Хотя в цифровых системах используются как целые числа без знака, так и целые числа со знаком, даже 32-битного целого числа недостаточно для обработки всего диапазона чисел, который может обработать калькулятор, и это даже не включая дроби. Чтобы приблизиться к большему диапазону и точности действительных чисел , мы должны отказаться от целых чисел со знаком и чисел с фиксированной запятой и перейти к формату «с плавающей запятой ».

В десятичной системе мы знакомы с числами с плавающей запятой в форме ( научная запись ):

1,1030402 × 10 5 = 1,1030402 × 100000 = 110304,02

или, более компактно:

1.1030402E5

что означает «1,1030402 умножить на 1 с последующими 5 нулями». Мы имеем определенное числовое значение (1.1030402) , известное как « мантисса », умноженную на мощности 10 (E5, что означает 10 5 или 100000), известное как « показатель ». Если у нас отрицательный показатель степени, это означает, что число умножается на 1, которое находится на много разрядов справа от десятичной точки. Например:

2,3434E − 6 = 2,3434 × 10 −6 = 2,3434 × 0,000001 = 0,0000023434

Преимущество этой схемы состоит в том, что, используя показатель степени, мы можем получить гораздо более широкий диапазон чисел, даже если количество цифр в значении или «числовая точность» намного меньше, чем диапазон. Подобные двоичные форматы с плавающей запятой могут быть определены для компьютеров. Существует ряд таких схем, наиболее популярная из которых определена Институтом инженеров по электротехнике и радиоэлектронике (IEEE). IEEE 754-2008 стандарт спецификация определяет формат с плавающей точкой 64 бита посредством:

  • 11-битная двоичная экспонента в формате «избыток-1023». Превышение-1023 означает, что показатель степени отображается как двоичное целое число без знака от 0 до 2047; вычитание 1023 дает фактическое значение со знаком
  • 52-битное значение, также беззнаковое двоичное число, определяющее дробное значение с ведущей подразумеваемой "1"
  • знаковый бит, задающий знак числа.

Давайте посмотрим, как выглядит этот формат, показав, как такое число будет храниться в 8 байтах памяти:

байт 0 S x10 x9 x8 x7 x6 x5 x4
байт 1 x3 x2 x1 x0 m51 m50 m49 m48
байт 2 m47 m46 m45 m44 m43 m42 m41 m40
байт 3 m39 m38 m37 m36 m35 m34 m33 m32
байт 4 m31 m30 m29 m28 m27 m26 m25 m24
байт 5 m23 m22 m21 m20 m19 m18 m17 m16
байт 6 m15 m14 m13 m12 m11 m10 m9 m8
байт 7 m7 m6 m5 м4 м3 m2 m1 m0

где «S» обозначает бит знака, «x» обозначает бит экспоненты, а «m» обозначает бит значимости. Как только биты здесь извлечены, они преобразуются с вычислением:

<знак> × (1 + <дробное значащее>) × 2 <экспонента> - 1023

Эта схема предоставляет числа, содержащие примерно 15 десятичных цифр, со следующим диапазоном чисел:

максимум минимум
положительный 1,797693134862231E + 308 4.940656458412465E-324
отрицательный -4.940656458412465E-324 -1.797693134862231E + 308

В спецификации также определены несколько специальных значений, которые не являются числами и известны как NaN для «Not A Number». Они используются программами для обозначения недопустимых операций и т.п.

Некоторые программы также используют 32-битные числа с плавающей запятой. В наиболее распространенной схеме используется 23-битовая мантисса со знаковым битом, плюс 8-битная экспонента в формате «лишний 127», что дает семь допустимых десятичных цифр.

байт 0 S x7 x6 x5 x4 x3 x2 x1
байт 1 x0 m22 m21 m20 m19 m18 m17 m16
байт 2 m15 m14 m13 m12 m11 m10 m9 m8
байт 3 m7 m6 m5 м4 м3 m2 m1 m0

Биты преобразуются в числовое значение с вычислением:

<знак> × (1 + <дробное значащее>) × 2 <экспонента> - 127

что приводит к следующему диапазону чисел:

максимум минимум
положительный 3.402823E + 38 2,802597E-45
отрицательный -2.802597E-45 -3.402823E + 38

Такие числа с плавающей запятой в целом известны как «вещественные числа» или «числа с плавающей запятой», но с некоторыми вариациями:

32-битное значение с плавающей запятой иногда называют «real32» или «single», что означает «значение с плавающей запятой одинарной точности».

64-битное число с плавающей запятой иногда называют «real64» или «double», что означает «значение с плавающей запятой двойной точности».

Соотношение между числами и битовыми комбинациями выбрано для удобства работы с компьютером; восемь байтов, хранящиеся в памяти компьютера, могут представлять 64-битное действительное число, два 32-битного действительного числа, четыре знаковых или беззнаковых целых числа или какой-либо другой вид данных, которые умещаются в восемь байтов. Единственная разница в том, как их интерпретирует компьютер. Если бы компьютер сохранил четыре целых числа без знака, а затем прочитал их из памяти как 64-битное действительное число, это почти всегда было бы вполне допустимым действительным числом, хотя это были бы ненужные данные.

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

Представление имеет ограниченную точность. Например, только 15 десятичных цифр могут быть представлены 64-битным вещественным числом. Если очень маленькое число с плавающей запятой добавляется к большому, результатом будет просто большое число. Маленькое число было слишком маленьким, чтобы даже отображаться с разрешением 15 или 16 цифр, и компьютер фактически отбрасывает его. Анализ влияния ограниченной точности - хорошо изученная проблема. Оценка величины ошибок округления и методы ограничения их влияния на большие вычисления являются частью любого большого вычислительного проекта. Предел точности отличается от предела диапазона, так как он влияет на значение, а не на показатель степени.

Мантисса - это двоичная дробь, которая не обязательно полностью соответствует десятичной дроби. Во многих случаях сумма обратных степеней двойки не соответствует определенной десятичной дроби, и результаты вычислений будут немного неточными. Например, десятичная дробь «0,1» эквивалентна бесконечно повторяющейся двоичной дроби: 0,000110011 ...

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

Программирование на языке ассемблера требует, чтобы программист отслеживал представление чисел. Если процессор не поддерживает требуемую математическую операцию, программист должен разработать подходящий алгоритм и последовательность команд для выполнения операции; на некоторых микропроцессорах даже целочисленное умножение должно выполняться программно.

Языки программирования высокого уровня, такие как Ruby и Python, предлагают абстрактное число, которое может быть расширенным типом, например, рациональным , большим или сложным . Математические операции выполняются библиотечными подпрограммами, предоставляемыми реализацией языка. Заданный математический символ в исходном коде путем перегрузки оператора вызовет другой объектный код, соответствующий представлению числового типа; математические операции с любыми числами - знаковыми, беззнаковыми, рациональными, с плавающей запятой, с фиксированной запятой, целыми или сложными - записываются точно так же.

Некоторые языки, такие как REXX и Java , предоставляют операции с десятичными числами с плавающей запятой, что приводит к ошибкам округления другой формы.

Смотрите также

Примечания и ссылки

Первоначальная версия этой статьи была основана на общественное достояние статьи из Vectorsite Greg Гебель в .