8 разрядный формат: Представьте число 63₁₀ в беззнаковом 8-разрядном формате

Содержание

СпецПромДизайн

Формат Intel-HEX

Введение

Шестнадцатиричный объектный формат файлов Intel-HEX (далее просто HEX-формат) – это способ представить двоичные данные в виде кодов ASCII. Поскольку файл состоит из символов ASCII, а не двоичных кодов, появляется возможность хранить данные на бумаге, перфоленте или перфокартах, выводить их на терминал, принтер и т.д. Восьмибитовый HEX-формат файлов предусматривает размещение данных и кода в 16-разрядном линейном адресном пространстве для 8-разрядных процессоров Intel. 16-разрядный HEX-формат файлов дополнительно позволяет использовать 20-разрядное сегментное пространство адресов 16-разрядных процессоров Intel. И, наконец, 32-разрядный формат позволяет оперировать линейным 32-разрядным адресным пространством 32-разрядных процессоров.

Шестнадцатиричное представление двоичных данных в виде ASCII требует использование двух символов для записи одного байта, при этом первый символ всегда соответствует старшей тетраде битов одного байта.

Такой подход увеличивает количество символов в двое по сравнению с количеством двоичных данных.

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

Записи могут быть следующих типов:

  • Данные (определена для всех форматов данных)
  • Маркер конца файла (определена для всех форматов файла)
  • Сегментный адрес (определена для 16- и 32-битных форматов)
  • Сегментный адрес старта (определена для 16- и 32-битных форматов)
  • Линейный адрес (определена только для 32-битного формата)
  • Линейный адрес старта (определена только для 32-битнного формата)

Общий формат записей

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
DATA
Контрольная сумма
CHECKSUM
: 1 байт 2 байта 1 байт RECLEN байт 1 байт

Каждая запись представляет собой ASCII-строку файла.

В одной строке – одна запись.

Каждая запись начинается с МАРКЕРА ЗАПИСИ, который обозначается ASCII-символом двоеточие («:»).

Каждая запись содержит поле RECLEN, определяющее количество байтов данных или информационных байтов, назначение которых определяется типом записи. Максимальное значение этого поля – 255 (0xFF).

Каждая запись содержит поле OFFSET, определяющее 16-битное смещение в адресном пространстве байтов данных. Это поле используется только в записях данных, а в остальных случаях оно должно быть равно нулю.

Каждая запись содержит поле TYPEREC, определяющее тип текущей записи (из ранее упомянутых шести). Это поле используется для интерпретации всех остальных полей записи. Типы записей кодируются следующими значениями поля TYPEREC (в ASCII):

  • «00» – данные
  • «01» – маркер конца файла
  • «02» – адрес сегмента
  • «03» – сегментный адрес старта
  • «04» – линейный адрес
  • «05» – линейный адрес старта

Каждая запись содержит поле DATA переменной длины, которое содержит ноль или более байтов, закодированных символами ASCII. Назначение этих байтов определяется типом записи.

Наконец, каждая запись завершается полем CHECKSUM, гарантирующим целостность всех данных записи. Значение этого поля равно дополнению по модулю 256 до нуля суммы по модулю 256 всех байтов, начиная с поля RECLEN и заканчивая последним байтом поля DATA. При считывании записи следует суммировать по модулю 256 все байты записи, включая поле CHECKSUM. Если в конце концов сумма равна нулю, это означает, что данные считаны без искажений, в противном случае данные недостоверны.

Запись «Линейный адрес»

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
ULBA
Контрольная сумма
CHECKSUM
: 02 0000 04 2 байта 1 байт

Эта запись служит для задания значения битов 16-31 в линейном базовом адресе (LBA, Linear Base Address), причем биты 0-15 LBA равны нулю. Биты 16-31 LBA определяются верхним линейным базовым адресом (ULBA, Upper Linear Base Address). Абсолютное значение адреса байта данных в памяти определяется как сумма значения LBA и значения поля OFFSET в последующих записях данных, плюс индекс байта данных внутри поля DATA. Эта сумма выполняется без учёта переполнения результата (то есть не может превышать 0xFFFFFFFF, 4 Гб).

Фактический линейный адрес байта данных вычисляется в итоге по формуле:

ByteAddr = (LBA + DRLO + DRI) mod 4G,

где: DRLO – значение поля OFFSET записи данных;
DRI – индекс байта в поле DATA записи данных;
mod 4G – операция «сложение по модулю 232«.

Когда запись «Линейный адрес» встречается в файле, вычисляется значение LBA, которое действует для всех последующих записей данных, пока не встретится снова запись «Линейный адрес». По умолчанию LBA = 0.

Запись «Адрес сегмента»

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
USBA
Контрольная сумма
CHECKSUM
: 02 0000
04
2 байта 1 байт

Эта запись служит для задания значения битов 4-19 сегментного базового адреса (SBA, Segment Base Address), где биты 0-3 SBA равны нулю. Биты 4-19 SBA определяются верхним базовым адресом сегмента (USBA, Upper Segment Base Address). Абсолютный адрес байта в записи данных вычисляется путем прибавления к SBA значения поля OFFSET записи данных и индекса байта относительно начала поля DATA. Прибавление смещения (OFFSET) осуществляется по модулю 65536 (64 К), без учёта переполнения.

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

ByteAddr = SBA + (DRLO + DRI) mod 64K,

где: DRLO – значение поля OFFSET записи данных;
DRI – индекс байта в поле DATA записи данных;

mod 64K – операция «сложение по модулю 65536».

Когда запись «Адрес сегмента» встречается в файле, вычисляется значение SBA, которое действует для всех последующих записей данных, пока не встретится снова запись «Адрес сегмента». По умолчанию SBA = 0.

Запись данных

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
DATA
Контрольная сумма
CHECKSUM
: 1 байт 2 байта 00 RECLEN байтов 1 байт

Эта запись собственно и содержит данные. Метод вычисления фактического (абсолютного) адреса каждого байта данных в памяти определяется по вышеприведённым формулам и зависит от формата данных.

Линейный адрес старта

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
EIP
Контрольная сумма
CHECKSUM
: 04 0000 05 4 байта 1 байт

Запись «Линейный адрес старта» используется для указания адреса, с которого начинается исполнение объектного файла. Это значение заносится в регистр EIP процессора. Следует обратить внимание, что эта запись определяет только точку входа сегмента кода для защищённого режима процессоров 80386. В обычном режиме точка старта определяется записью «Сегментный адрес старта», которая определяет значения пары регистров CS:IP.

Запись «Линейный адрес старта» может находиться в любом месте файла. Если её нет, загрузчик использует адрес старта по умолчанию.

Значение регистра EIP процессора содержится в соответствующем поле записи, для него требуется всегда 4 байта.

Сегментный адрес старта

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
CS:IP
Контрольная сумма
CHECKSUM
: 04 0000 03 4 байта 1 байт

Запись «Сегментный адрес старта» используется для указания адреса, с которого начинается исполнение объектного файла. Это значение определяет 20-битный адрес, заносимый в регистры CS:IP процессора. Следует обратить внимание, что эта запись определяет только точку входа в 20-битном адресном пространстве процессоров 8086/80186.

Запись «Сегментный адрес старта» может находиться в любом месте файла. Если её нет, загрузчик использует значение по умолчанию.

Значение регистров CS:IP процессора содержится в соответствующем поле записи, для него требуется всегда 4 байта. Значение хранится в порядке «от старшего к младшему», то есть младший байт значения регистра IP хранится в четвертом байте поля CS:IP, старший – в третьем, затем во втором хранится младший байт значения регистра CS, и в первом – старший байт регистра CS.

Маркер конца файла (терминатор)

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Контрольная сумма
CHECKSUM
: 00 0000 01 1 байт

Эта запись не содержит полей с изменяющимися данными, поэтому выглядит всегда совершенно одинаково: «:00000001FF». Запись обозначает конец данных в файле. Все последующие строки, если они есть в файле, игнорируются.

Пример содержимого файла формата Intel-HEX

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF

     Маркер записи
     Кол-во данных
     Смещение
     Тип записи
     Данные
     Контрольная сумма

Формат двоичных чисел с плавающей запятой

Примеры решенийПеревод дробных чисел Формат с плавающей точкой Перевести в 2 систему Перевод в 8 систему Перевод в 10 систему Дополнительный код Сложение двоичных чиселУмножение двоичных чисел

Назначение сервиса. Онлайн-калькулятор предназначен для представления вещественных чисел в формат с плавающей точкой.
  • Решение онлайн
  • Видеоинструкция

Число

представлено в 102 системы счисления.
Представить число в:
  нормализованном экспоненциальном виде
  денормализованном экспоненциальном виде
  32 битный формат IEEE 754
  64 битный формат IEEE 754
Перевести обратно в десятичное представление
Правила ввода чисел
  1. Числа в десятичной системе счисления могут вводиться как без дробной, так и с дробной частью (234234.455).
  2. Числа в двоичной системе счисления состоят только из цифр 0 и 1 (10100.01).
  3. Числа в шестнадцатеричной системе счисления состоят из цифр 09 и букв AF.
  4. Можно также получать обратное представление кода (из шестнадцатеричной системы счисления в десятичную, 40B00000)
Пример №1. Представить число 133,54 в форме числа с плавающей точкой.
Решение. Представим число 133.54 в нормализованном экспоненциальном виде:
1.3354*102 = 1.3354*exp102
Число 1.3354*exp102 состоит из двух частей: мантиссы M=1.3354 и экспоненты exp10=2
Если мантисса находится в диапазоне 1 ≤ M Представление числа в денормализованном экспоненциальном виде.
Если мантисса находится в диапазоне 0,1 ≤ M Представим число в денормализованном экспоненциальном виде: 0.13354*exp103

Пример №2. Представить двоичное число 101.102 в нормализованном виде, записать в 32-битом стандарте IEEE754.
Решение.
Представление двоичного числа с плавающей точкой в экспоненциальном нормализованном виде.
Сдвинем число на 2 разрядов вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа:
Мантисса M=1. 011
Экспонента exp2=2
Преобразование двоичного нормализованного числа в 32 битный формат IEEE 754.
Первый бит отводится для обозначения знака числа. Поскольку число положительное, то первый бит равен 0
Следующие 8 бит (с 2-го по 9-й) отведены под экспоненту.
Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта +127. Таким образом, наша экспонента: 2 + 127 = 129
Переведем экспоненту в двоичное представление.
Оставшиеся 23 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1 ≤ M Для перевода целой части необходимо умножить разряд числа на соответствующую ему степень разряда.
01100000000000000000000 = 222*0 + 221*1 + 220*1 + 219*0 + 218*0 + 217*0 + 216*0 + 215*0 + 214*0 + 213*0 + 212*0 + 211*0 + 210*0 + 29*0 + 28*0 + 27*0 + 26*0 + 25*0 + 24*0 + 23*0 + 22*0 + 21*0 + 20*0 = 0 + 2097152 + 1048576 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 3145728
В десятичном коде мантисса выражается числом 3145728
В результате число 101. 10 представленное в IEEE 754 c одинарной точностью равно 01000000101100000000000000000000.
Переведем в шестнадцатеричное представление.
Разделим исходный код на группы по 4 разряда.
010000001011000000000000000000002 = 0100 0000 1011 0000 0000 0000 0000 0000 2
Получаем число:
0100 0000 1011 0000 0000 0000 0000 0000 2 = 40B0000016

Задать свои вопросы или оставить замечания можно внизу страницы в разделе Disqus.
Можно также оставить заявку на помощь в решении своих задач у наших проверенных партнеров (здесь или здесь).

Представление с плавающей запятой

Карл Берч, Колледж Хендрикса, сентябрь 2011 г.

Представление с плавающей запятой by Carl Burch находится под лицензией Creative Commons Attribution-Share Alike 3.0 США Лицензия.
На основании работы в www.cburch.com/books/float/ .

Содержание

1. С фиксированной точкой
2. Нормализованная с плавающей запятой
2.1. Основы работы с плавающей запятой
2.2. Представленные числа
3. Стандарт IEEE
3.1. Форматы IEEE
3.2. Денормализованные числа
3.3. Нечисловые значения
4. Арифметика

Представление чисел в виде целых чисел с фиксированным числом битов имеет некоторые заметные ограничения. Он не может обрабатывать числа, содержащие дробь, например 3,14, и не подходит для очень больших чисел, которые не умещаются в 32 бита, как 6,02 × 10 23 . В этом документе мы изучим представление с плавающей запятой . для обработки таких чисел — и мы посмотрим особенно в формате IEEE, который сегодня используется повсеместно.

1. Фиксированная точка

Одна возможность для обработки чисел с дробными частями заключается в добавлении битов после запятой: Первый бит после запятой идут половинки, следующий бит — четверти место, следующий бит восьмое место, и так далее.

Предположим, что мы хотим представить 1,625 (10) . Мы будем хотите 1 вместо единиц, оставив нам 0,625. Затем мы хотим 1 в половинки места, оставляя нас с 0,625 — 0,5 = 0,125. Никаких четвертей не будет подходит, поэтому поставьте 0 там. Нам нужна единица на восьмом месте, и мы вычтите 0,125 из 0,125, чтобы получить 0,

Итак, двоичное представление 1,625 будет 1,101 (2) .

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

Чтобы представить 1,625, мы использовали бы первые 24 бита для указать 1, и мы будем использовать оставшиеся 8 бит для представления 0,625. Таким образом, наше 32-битное представление будет таким:

00000000 00000000 00000001 10100000.

Представление с фиксированной точкой работает достаточно хорошо, пока вы работаете с числами в пределах поддерживаемого диапазона. 32-битное представление с фиксированной точкой, описанное выше. может представлять любое число, кратное 1/256, от 0 до 2 24 ≈ 16,7 млн. Но программам часто приходится работать с числами из гораздо более широкого диапазона. По этой причине представление с фиксированной точкой используется не очень часто. сегодняшний компьютерный мир.

Заметным исключением является финансовое программное обеспечение. Здесь все вычисления должны быть представлены с точностью до копейки, и на самом деле дальнейшая точность редко желательна, так как результаты всегда округляются до копейки. Более того, для большинства приложений не требуется большие суммы (например, триллионы долларов), поэтому ограниченный диапазон чисел с фиксированной точкой не является проблемой. Таким образом, программы обычно используют вариант представления с фиксированной точкой, который представляет каждую сумму как целое число, кратное 1/100, просто поскольку описанное выше представление с фиксированной точкой представляет каждое число кратно 1/256.

2. Нормализованное представление с плавающей запятой

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

2.1. Основы работы с числами с плавающей запятой

Хотя мы хотели бы использовать экспоненциальное представление, мы научное обозначение степеней 2, а не степеней 10, потому что мы работаем с компьютерами, которые предпочитают двоичный код. Например, 5,5 (10) равно 101.1 (2) в двоичном формате и преобразует a в двоичный научный обозначение 1,011 (2)  × 2 2 . При преобразовании в двоичную экспоненциальную запись здесь мы переместил десятичную точку на два разряда влево, как если бы мы при преобразовании 101.1 (10) в экспоненциальное представление: было бы 1,011 (10)  × 10 2 .)

Получив число в двоичном экспоненциальном представлении, мы по-прежнему должен иметь метод для отображения этого в набор битов. Во-первых, давайте определим две части научной репрезентации: В 1.011 (2)  × 10 2 , мы звоним 1.011 (2) мантисса (или мантиссы ), и мы вызовите 2 показатель . В этом разделе мы будем использовать 8 бит для хранения такого числа.

Мы используем первый бит для представления знака (1 для отрицательного, 0 для положительный), следующие четыре бита для суммы 7 и фактический показатель степени (мы добавляем 7, чтобы учесть отрицательные показатели), а последние три бита для дробной части мантиссы. Обратите внимание, что мы опускаем целая часть мантиссы: Так как мантисса должна иметь ровно одну ненулевой бит слева от десятичной точки и единственный ненулевой бит равно 1, мы знаем, что бит слева от десятичной точки должен быть равен 1. Нет смысла тратить место на вставку этого 1 в наш бит. шаблон, поэтому мы включаем только биты мантиссы справа от десятичная точка.

Для нашего примера 5,5 (10)  = 1,011 (2)  × 2 2 , мы добавляем 7 к 2, чтобы получить 9 (10)  = 1001 (2) для битов экспоненты. В биты мантиссы мы помещаем биты, следующие за десятичной точкой научной записи, 011. Это дает нам 0 1001 011 как 8-битное представление 5.5 (10) .

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

Предположим, мы хотим представить -96 (10) .

  1. Сначала мы преобразуем желаемое число в двоичное: −1100000 (2) .
  2. Затем мы преобразуем это в двоичную экспоненциальную запись: −1,100000 (2)  × 2 6 .
  3. Затем мы вписываем это в биты.
    1. Мы выбираем 1 для бита знака, так как число отрицательное.
    2. Прибавляем 7 к показателю степени и помещаем результат в четверку биты экспоненты. Для этого примера мы приходим к 6 + 7 = 13 (10)  = 1101 (2) .
    3. Три бита мантиссы являются первыми три бита, следующих за ведущим 1: 100. Если бы случилось так, что после разряда 1/8 было 1 бит, нам нужно было бы округлить мантиссу до ближайшей восьмой.)
    Таким образом, мы получаем 1 1101 100.

И наоборот, предположим, что мы хотим расшифровать число 0 0101 100.

  1. Мы видим, что число положительное, а биты экспоненты представляют 0101 (2)  = 5 (10) . Это на 7 больше, чем есть на самом деле. показатель степени, поэтому фактический показатель степени должен быть равен −2. Таким образом, в двоичной экспоненциальной записи мы имеем 1,100 (2)  × 2 −2 .
  2. Преобразуем это в двоичный файл: 1.100 (2)  × 2 −2  = 0,011 (2) .
  3. Преобразуем двоичное в десятичное: 0,011 (2)  = 1/4 + 1/8 = 3/8 = 0,375 (10) .

2.2. Представленные числа

Этот 8-битный формат с плавающей запятой может представлять широкий диапазон как маленькие числа и большие числа. Чтобы найти наименьшее возможное положительное число, которое мы можем представить, мы бы хотели, чтобы бит знака был равен 0, мы бы поставить 0 во всех биты экспоненты, чтобы получить наименьшую возможную экспоненту, и мы бы поставьте 0 во все биты мантиссы. Это дает нам 0 0000 000, что представляет

1. 000 (2)  × 2 0 − 7  = 2 −7  ≈ 0,0078 (20)

Чтобы определить наибольшее положительное число, нам нужен бит знака чтобы по-прежнему быть 0, мы поместили бы 1 во все биты показателя степени, чтобы получить наибольший показатель степени возможно, и мы бы поставили 1 во все биты мантиссы. Это дает нам 0 1111 111, что соответствует

. 1.111 (2)  × 2 15 − 7 = 1.111 (2) × 2 8 = 111100000 (2) = 480 (10) .

Таким образом, наш 8-битный формат с плавающей запятой может представлять положительные числа примерно от 0,0078 (10) до 480 (10) . Напротив, 8-битное представление с дополнением до двух может только представляют положительные числа от 1 до 127.

Но обратите внимание, что представление с плавающей запятой не может представлять все числа в своем диапазоне — это было бы невозможно, так как восемь битов могут представлять только 2 8   = 256 различные значения, и существует бесконечно много действительных чисел в диапазоне представлять. В чем дело? Рассмотрим, как представить 51 (10) на этой схеме. В двоичном формате это 110011 (2)  = 1,10011 (2)  × 2 5 . Когда мы пытаемся вписать мантиссу в 3-битную часть нашей схемы, мы нашли что последние два бита не подходят: мы были бы вынуждены округлить до 1,101 (2)  × 2 5 и результирующий битовый шаблон будет 0 1100 101. Это округление означает, что мы не представляем число точно. На самом деле 1 1100 101 переводится как

1.101 (2)  × 2 12 − 7  = 1. 101 (2)  × 2 5  = 110100 (2)  = 52 (10) .

Таким образом, в нашем 8-битном представление, 51 равно 52! Это довольно раздражает, но это цена, которую мы должны заплатить, если хотим справиться с большим диапазон чисел с таким малым количеством бит.

(Кстати, при округлении цифр, которые точно между двумя возможности, типичная политика округления так что последний бит мантиссы равен 0. Например, взяв число 19, мы получим 1,0011 (2)  × 2 4 , и мы округлим это число до 1,010 (2)  × 2 4  = 20 (10) . С другой стороны, округление числа 21 = 1,0101 (2)  × 2 4 приведет к 1,011 (2)  × 2 4 , оставив 1 в последнем бите мантиссы, которую мы хотим избегать; поэтому вместо этого мы округляем до до 1,010 (2)  × 2 4  = 20 (10) . Несомненно, в начальной школе вас учили «облавы» все время; компьютеры этого не делают, потому что если мы последовательно округляем, все эти округления будут смещать общее количество чисел вверх. Округление так, чтобы последний бит был равен 0, гарантирует, что ровно половина возможные числа округляются вверх и ровно наполовину вниз.)

Хотя представление с плавающей запятой не может представлять все числа именно дает нам гарантированное количество значащих цифр. Для этого 8-битного представления, мы получаем точность до одной цифры, что довольно ограниченное. Чтобы получить большую точность, нам нужно больше битов мантиссы. Предположим, мы определили аналогичное 16-битное представление с 1 битом для бита знака, 6 битами для показателя степени плюс 31 и 9 бит для мантиссы.

Это изображение с его 9биты мантиссы, случается, чтобы обеспечить три значащие цифры. Учитывая ограниченную длину представления с плавающей запятой, мы должны найти компромисс между большим количеством битов мантиссы (чтобы получить большую точность) и больше битов экспоненты (чтобы получить более широкий диапазон чисел для представления). Для 16-битных чисел с плавающей запятой разделение на 6 и 9 является разумным. компромисс между диапазоном и точностью.

3. Стандарт IEEE

Почти все современные компьютеры соответствуют стандарту IEEE 754. стандарт для представления чисел с плавающей запятой. Этот стандарт был в значительной степени разработан 1980 официально принят в 1985 г. хотя несколько производителей продолжали использовать свои собственные форматы на протяжении 1980-х гг. Этот стандарт аналогичен 8-битным и 16-битным форматам. мы уже исследовали, но стандарт имеет дело с более длинным битом длины, чтобы получить большую точность и диапазон; и включает в себя два особых случая для работы с очень маленькими и очень большими числами.

3.1. Форматы IEEE

Есть две основные разновидности стандарта, для 32 бит и 64 бит, хотя он определяет и другие длины, например 128 бит.

sign exponent mantissa exponent significant
format bit bits bits excess digits
Our 8-битный 1 4 3 7 1
Наш 16-битный 1 6 9 31 3
IEEE 32-bit 1 8 23 127 6
IEEE 64-bit 1 11 52 1,023 15
IEEE 128-bit 1 15 112 16,383 34

Во всех форматах используется смещение экспоненты на полпути вверх диапазон целых чисел, которые могут поместиться в разряды экспоненты; это называется избыток . Для 8-битного формата у нас было 4 бита экспоненты; самое большое число, которое может уместиться в 4 бита 2 4  − 1 = 15, поэтому избыток равен 7 ≈ 15/2. 32-битный формат IEEE имеет 8 битов экспоненты, поэтому наибольшее число соответствует 255, а превышение составляет 127 ≈ 255/2.

В программировании на C тип float соответствует 32 битам, а double соответствует 64 битам. (На самом деле C не определяет длину или представление для эти типы. Но это наиболее распространено. Java, кстати, требует, чтобы эти типы соответствуют соответствующим форматам IEEE.)

Стандартные форматы IEEE обычно следуют правилам, которые мы обрисованы в общих чертах до сих пор, но есть два исключения: денормализованный числа и нечисловые значения. Мы рассмотрим их далее.

3.2. Денормализованные числа

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

Наименьшее представимое положительное число равно 2 −7  = 1/128 (битовая комбинация 00000000), а наибольшее представимое отрицательное число равно −2 −7  = -1/128 (битовый шаблон 10000000). Это небольшие цифры, но когда мы смотрим на приведенное выше число линии, мы видим аномалию: они разделены странно большим промежутком. И, что особенно важно, этот разрыв пропускает один из самых важные цифры всего: ноль!

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

Каждая из полых синих точек в первой числовой строке соответствуют битовым шаблонам, где все биты экспоненты равны 0. Чтобы вместо этого прийти к пустым красным числам, значение таких цифры меняются следующим образом: Когда все биты экспоненты равны 0, то показатель степени равен -6, а перед мантиссой подразумевается 0. Рассмотрим битовую комбинацию 0 0000 010: В плавающей запятой в стиле IEEE (с использованием красных точек) это будет представлять 0,010 (2)  × 2 −6 . Напротив, в простом формате с плавающей запятой (с использованием синих точек) этот же битовый шаблон будет соответствовать 1,010 (2)  × 2 −7 ; изменения в бите перед десятичной точки мантиссы и в показателе степени −7.

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

Предположим, мы хотим представить 0,005 (10) в нашем 8-битном формате с плавающей запятой с денормализованный случай. Сначала мы преобразуем наше число в форма x  × 2 −6 . В этом случае мы бы получили 0,320 (10)  × 2 −6 . Преобразование 0,320 (10) в двоичном виде, получаем примерно 0,0101001 (2) . Однако в 8-битном формате у нас есть только три бита мантиссы, поэтому мы округлим это до 0,011 (2) . Таким образом, мы имеем 0,011 (2)  × 2 −6 , и наше битовое представление будет 0 0000 011. Это всего лишь приближение к исходному числу 0,005 (10) : Это примерно 0,00586 (10) . Это может показаться грубым приближением, но это лучше, чем мы могли бы сделать в нашем простом формате раньше, где ближайший мы могли бы получить 0,00781 (10) .

Как представить 0? Проходим тот же процесс: Преобразование этого в форму x  × 2 −6 , получаем 0,0 × 2 −6 . Это переводится в битовое представление 0 0000 000. Обратите внимание, что 1 0000 000 также представляет 0 (технически -0). Наличие двух представлений 0 — раздражающая аномалия, но комитет IEEE решил, что это безобидно по сравнению с сложность любых методов, которые они рассматривали, чтобы избежать этого.

Почему -6 для показателя степени? Было бы более интуитивно понятно используйте -7, так как обычно это показатель степени со всеми нулями. Однако мы используем -6, потому что хотим плавный переход между нормализованными значениями и денормализованными значениями. Наименьшее положительное нормализованное значение равно 1 × 2 −6 (битовый шаблон 0 0001 000). Если бы мы использовали -7 для денормализованного показателя степени, то самый большой денормализованный значение будет 0,111 (2)  × 2 −7 , то есть примерно половина наименьшего положительного нормализованного значения. Используя тот же показатель степени, что и для наименьшего нормализованного случая, стандарт равномерно распределяет денормализованные числа от наименьшего положительное нормализованное число к 0. Вторая числовая линия на диаграмме выше иллюстрирует это: красные круги, представляющие значения, обрабатываемые денормализованным случай, распределены равномерно между твердым черным круги, представляющие числа, обработанные нормализованным кейс.

Наше обсуждение сосредоточилось на 8-битном представлении, которое на самом деле совершенно непрактично. Но та же концепция работает одинаково для стандарта IEEE. форматы с плавающей запятой. Основное отличие состоит в том, что показатель степени варьируется в зависимости от превышение формата. В 32-битном стандарте, например, денормализованный case все еще срабатывает, когда все биты экспоненты равны нулю, но экспонента он представляет собой -126. Это потому, что нормализованный случай включает показатель экспоненты-127, и, таким образом, наименьший показатель для нормализованных чисел равно 1 − 127 = -126.

3.3. Нечисловые значения

Разработчики стандарта IEEE позаботились о некоторых особых случаях — в частности, вычисления, где ответ не вписывается в диапазон определенных чисел. Чтобы учесть такие возможности, они зарезервировали показатель «все единицы» для нечисловых значения . Они разработали два типа нечисловых значений в стандарте IEEE. стандарт.

  • Если показатель степени состоит из единиц, а мантисса состоит из нулей, тогда число представляет бесконечность или отрицательную бесконечность, в зависимости от знаковый бит. По сути, эти два значения представляют числа, которые ушли в прошлое. за границами. Это значение часто является результатом переполнения; например, если вы добавили наибольшее положительное значение для себя, вы получите бесконечность. Или если вы разделите 1 на a крошечное число, вы получите либо бесконечность, либо отрицательное бесконечность.

  • Если показатель степени равен единицам, а в мантиссе есть ненулевые биты, тогда число представляет собой «не число», записанное как NaN. Это представляет собой состояние ошибки, подобное следующему.

    Квадратный корень −1
    ARCSIN

    4.

    Арифметика

    Возможно, вы захотите, чтобы применялись стандартные законы арифметики. к числовым представлениям. Например, было бы удобно, если бы коммутативный закон ( x  +  y  = y  +  x ) применяется к доп.

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

    Однако с числами с плавающей запятой IEEE многие законы нарушаются. Закон коммутативности остается в силе как для сложения, так и для умножения. Но ассоциативный закон дополнение ( x  + ( y  +  z ) = ( x  +  y ) +  z ) не: Предположим, что 90 616 x 90 617 и 90 616 y 90 617 являются максимально возможным числовым значением, и z были самыми отрицательными числовыми значениями. Тогда значение x  + ( y  +  z ) будет равно x , поскольку y  +  z равно 0, а x  + 0 равно x . Но значение ( x  +  y ) +  z будет положительной бесконечностью, так как x  +  y приводит к переполнению, что эквивалентно бесконечности в Формат IEEE, и любое конечное число, добавленное к бесконечности, дает бесконечность. еще раз.

    Ассоциативный закон не подходит для сложения даже без обращения к таким Особые случаи. Возвращаясь к нашему 8-битному представлению, рассмотрим 90 616 x 90 617  = 1, 90 616 y 90 617  = 52, 90 616 z 90 617  = -52. Если вы оцениваете x  + ( y  +  z ), вы сначала заметите, что г  +  г  = 0 и поэтому x  + ( y  +  z ) равно 1. Но ( x  +  y ) +  z равно 0, поскольку значение 1 + 52 по-прежнему равно 52 из-за округления.

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

    1/6 + 1/6 + 1/6 + 1/6 + 1/6 + 1/6 = 1.

    Причина неудачи в том, что 1/6 не имеет точного представление с фиксированным количеством битов мантиссы и поэтому он должен быть аппроксимирован форматом IEEE. Как это бывает, это немного недооценивает. Если мы добавим эту недооценку к себя 6 раз, итого меньше 1,

    Такие странности — проблемы, а хорошие программисты очень осведомлен о них. Альтернативы пока никто не придумал это убедительно лучше, чем подход IEEE к представления чисел: у всех есть странные аномалии, и IEE подход избегает их лучше, чем большинство. Следовательно, все современные компьютеры используют это представление нецелых чисел.

    Разрядность и форматы файлов — ADM VFX Wiki

    База знаний
    • Разрядность
    • Форматы файлов
    • Запутанные настройки экспорта

    Битовая глубина

    Будучи студентом, вы будете выполнять большую часть своей работы в 8-битном формате. Photoshop и After Effects по умолчанию запускаются в 8-битном формате. Наиболее распространенные форматы вывода, такие как видео MP4 h.264, изображения JPEG и TGA, имеют 8-битную разрядность

    .
    Так что же такое битовая глубина и зачем мне это?

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

    8-битный градиент

    Ступени видны, плохо

    Градиенты в 8-битном режиме ухудшаются при применении цветокоррекции

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

     

    Что означает
    бит ?

    1 бит может хранить 2 значения, 1 или 0, включено или выключено

    8 бит могут хранить 256 значений в каждом канале, что дает нам тысячи цветов

    16 бит позволяют передавать 65 536 значений на канал, что дает нам триллиона цветов

     

    Почему не все файлы имеют максимальную разрядность?

    Чем выше битовая глубина, тем больше размер файла, и большинство устройств вывода, таких как компьютерные мониторы и телевизоры, отображают 8-битное изображение. Мы хотим работать с более высокой разрядностью в качестве промежуточного формата, но в конечном итоге создадим 8-битную версию окончательного. Это вот-вот изменится, новые телевизоры поддерживают HDR, то есть 10-битное.

    Специализированные мониторы для цветокоррекции могут отображать более высокую глубину цвета

     

    Кто какую разрядность использует?

    Проекты Visual Effects работают с форматом OpenEXR, который может хранить изображения с расширенным динамическим диапазоном в 32-битном и более эффективном 16-битном формате половинной точности

    TV Productions работает с 12-битными файлами QuickTime ProRes, некоторые все еще с 8-битными

    Цветокоррекция Работа в 10- и 12-битном формате

    Professional Photo обработка 16-битная

    Веб-дизайн по-прежнему 8-битный

     

    Плохо работает в 8-битном режиме?

    Да и нет. Это зависит от исходного изображения и предполагаемого использования

    Цветовая коррекция 8-битного снимка вашей кошки для публикации в Интернете, конечно, нет необходимости в высокой битовой глубине

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

    Создавать цифровую картину или анимацию в 8-битном формате — не лучшая идея, так как вы ограничиваете себя 256 шагами яркости на канал, что немного. Использование 16-битного уже даст вам 65 тысяч (32 тысячи в Photoshop), что намного больше. Разница заметна при работе с мелкими деталями и градиентами 90 005

    Если источник был записан с более высокой битовой глубиной, например, QuickTime ProRes 12 бит, необходимо сохранять по крайней мере битовую глубину записи на всех промежуточных этапах, чтобы не потерять качество. Преобразование в 8-битное приведет к потере качества, которое невозможно вернуть

     

    С какой разрядностью следует работать?

    Зависит от ваших инструментов и рабочего процесса, не все инструменты могут хорошо обрабатывать 32-битные

    В Photoshop и After Effects вы можете изменить глубину цвета в любое время, но разумнее определить ее до начала. Adobe не полностью 32-битная совместимость, многие фильтры по-прежнему не работают в 32, поэтому самый распространенный формат работы professional в Adobe — 16-битный

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

    В Maya это также зависит от выходного формата рендеринга и установки линейного цветового пространства

    .

    Если следующим этапом будет Nuke, используйте OpenEXR 16-бит половинной точности , называемый  RGBA (Half) 4×16  в Maya

    Если вашей следующей остановкой будет AE, вы также можете использовать OpenEXR, но более распространенным является целочисленный формат , такой как 16-битный TIF

    .

     

    См. также Форматы для промежуточных этапов в Руководстве по рабочему процессу проекта

     

    Расширенный динамический диапазон

    Изображения с 32 битами называются расширенным динамическим диапазоном. Настоящее HDR-изображение должно быть 32-битным. Термин HDR теперь будет размыт, поскольку потребительские телевизоры будут маркироваться как «поддерживающие HDR» для следующей большой вещи с 10-битным видео H.265


    Распространенные форматы разрядности

    Биты (бит/с)

    Шаги яркости
    в 1 канале

    Всего возможных цветов
    с 3 каналами RGB

     

    8

    256 = 2 8

    16 тысяч

     

    10

    1024 = 2 10

    1 миллиард

     

    12

    4096 = 2 12

    68 миллиардов

     

    16

    65 536 = 2 16

    281 трлн

     

    32

    4 294 967 296 = 2 32
    4 миллиарда

     

    80 октиллионов (8 x 10 28)

     


    Форматы файлов

    Не каждый формат файла позволяет сохранять всю разрядность, большинство форматов имеют ограничения

    За исключением JPEG, все указанные ниже форматы поддерживают сжатие без потерь и могут использоваться в качестве промежуточных форматов


    Формат

    Поддерживаемая битовая глубина

    Использование в анимации и визуальных эффектах


    JPEG

    8 бит sRGB

    Предварительный просмотр. Используйте 100% качество. Небольшой размер файла, быстрая загрузка в плеере. Также как фон в 3D или табличка для Matchmove. Никогда в качестве промежуточного формата


    TARGA (tga)

    8 бит sRGB

    Очень старый, но до сих пор используется в качестве промежуточного звена для поста TVC


    TIFF

    8- и 16-битный sRGB
    32-битный линейный с плавающей запятой

    Стандартный, если промежуточный 16-битный целое число требуется


    PNG

    8- и 16-битный sRGB
    8-битный на основе палитры

    Стандартный веб-формат. Поддерживает без потерь, поэтому полезно


    Cineon (dpx, cin)

    8, 10, 12, 16 sRGB и логарифмический

    Используется в качестве формата поставки, промежуточного и выходного формата
    Стандарт для телесина и DI-градации


    Photoshop (psd)

    8- и 16-битный sRGB
    32-битный линейный с плавающей запятой

    Photoshop работает по умолчанию.

    8 разрядный формат: Представьте число 63₁₀ в беззнаковом 8-разрядном формате

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Пролистать наверх