Формат номера компьютера - Computer number format
Компьютерный формат номер является внутренним представлением числовых значений в цифровых аппаратных устройствах и программное обеспечение, например, в программируемых компьютерах и калькуляторах . Числовые значения хранятся в виде групп битов , например байтов и слов. Кодирование между числовыми значениями и битовыми комбинациями выбрано для удобства работы с компьютером; кодировка, используемая набором команд компьютера, обычно требует преобразования для внешнего использования, например для печати и отображения. Различные типы процессоров могут иметь разные внутренние представления числовых значений, и для целых и действительных чисел используются разные соглашения. Большинство вычислений выполняется с числовыми форматами, которые помещаются в регистр процессора, но некоторые программные системы позволяют представлять произвольно большие числа с использованием нескольких слов памяти.
Представление двоичного числа
Компьютеры представляют данные в виде наборов двоичных цифр. Представление состоит из битов, которые, в свою очередь, группируются в более крупные наборы, например байты.
Двоичная строка | Восьмеричное значение |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
Длина битовой строки (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 для шестнадцатеричных чисел.
Преобразование между базами
Десятичный | Двоичный | Восьмеричный | Шестнадцатеричный |
---|---|---|---|
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 Гебель в .