stringtranslate.com

Формат числа компьютера

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

Двоичное представление чисел

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

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

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

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

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

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

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

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

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

Конвертация между базами

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

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

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

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

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

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

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

Даже если использовать больше цифр, точное представление невозможно. Число 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 или 100 000), известную как " экспонента ". Если у нас отрицательная экспонента, это означает, что число умножается на 1 на столько же знаков справа от десятичной точки. Например:

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

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

С битами, хранящимися в 8 байтах памяти:

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

<знак> × (1 + <дробная значимая часть>) × 2 <экспонента> − 1023

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

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

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

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

<знак> × (1 + <дробная значимая часть>) × 2 <экспонента> − 127

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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