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

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

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

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

Таблица 1: двоичное в восьмеричное
Двоичная строкаВосьмеричное значение
0000
0011
0102
0113
1004
1015
1106
1117
Таблица 2: Количество значений для битовой строки.
Длина битовой строки (b)Количество возможных значений (N)
12
24
38
416
532
664
7128
8256
9512
101024
...

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

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

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

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

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

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

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

Восьмеричный и шестнадцатеричное кодирование - удобные способы представления двоичных чисел, используемых компьютерами. Компьютерным инженерам часто приходится записывать двоичные числа, но на практике запись двоичного числа, такого как 1001001101010001, утомительна и подвержена ошибкам. Следовательно, двоичные величины записываются в восьмеричной системе счисления, или, что гораздо чаще, в шестнадцатеричной системе счисления (шестнадцатеричный), числовой формат. В десятичной системе есть 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: Сравнение значений в разных базах
ДесятичныйДвоичныйВосьмеричныйШестнадцатеричный
00000000000
10000010101
20000100202
30000110303
40001000404
50001010505
60001100606
70001110707
80010001008
90010011109
10001010120A
11001011130B
12001100140C
13001101150D
14001110160E
15001111170F

Каждая из этих систем счисления является позиционной системой, но в то время как десятичные веса являются степенями 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 × 105 = 1.1030402 × 100000 = 110304.02

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

1.1030402E5

что означает «1,1030402 умножить на 1 с последующими 5 нулями». У нас есть определенное числовое значение (1,1030402), известное как "значимое ", умноженное на степень 10 (E5, что означает 105 или 100 000), известный как "показатель степени ". Если у нас отрицательный показатель степени, это означает, что число умножается на 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 байтах памяти:

байт 0Sx10x9x8x7x6x5x4
байт 1x3x2x1x0m51m50m49m48
байт 2m47m46m45m44m43m42m41m40
байт 3m39m38m37m36m35m34m33m32
байт 4m31m30m29m28m27m26m25m24
байт 5m23m22m21m20m19m18m17m16
байт 6m15m14m13m12m11m10m9m8
байт 7m7m6m5м4м3m2m1m0

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

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

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

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

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

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

байт 0Sx7x6x5x4x3x2x1
байт 1x0m22m21m20m19m18m17m16
байт 2m15m14m13m12m11m10m9m8
байт 3m7m6m5м4м3m2m1m0

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

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

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

максимумминимум
положительный3.402823E + 382,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 ...[6]

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

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

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

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

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

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

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

  1. ^ Джон Стоукс (2007). Внутри машины: иллюстрированное введение в микропроцессоры и компьютерную архитектуру. Пресс без крахмала. п. 66. ISBN  978-1-59327-104-6.
  2. ^ "определение байта". Получено 24 апреля 2012.
  3. ^ «Микропроцессор и ЦП (центральный процессор)». Сетевой словарь. Архивировано из оригинал 3 октября 2017 г.. Получено 1 мая 2012.
  4. ^ "определение шипа". Получено 3 мая 2012.
  5. ^ "Ниббл". TechTerms.com. Получено 3 мая 2012.
  6. ^ Гебель, Грег. «Формат компьютерной нумерации». Получено 10 сентября 2012.