Преобразование из двоичного файла в IEEE с плавающей точкой - PullRequest
2 голосов
/ 13 марта 2011

Мне нужно преобразовать двоичное число 0000 0110 1101 1001 1111 1110 1101 0011 в IEEE с плавающей точкой.Ответ 1.10110011111111011010011 x 2 ^ −114, но как получается показатель степени?

Ответы [ 3 ]

2 голосов
/ 13 марта 2011

http://en.wikipedia.org/wiki/Single_precision_floating-point_format

Взять первые 9 цифр

0 00001101

Первая - это знак (0 == положительный)

Следующие 8 - это показатель степени, преобразуется в десятичную == 13. Знак в двоичном с плавающей запятой IEEE 32 смещается на 127, поэтому 13 - 127 = -114.

(а пропущенная 1 для дробной части неявна)

Готово: -)

1 голос
/ 26 октября 2014

например 33,1 число

первый:

преобразование десятичного числа в двоичное

33,1 = 100001,0001100110011001100. , .

секунда:

+1,000010001100110011001100 ... * 2 ^ 5

чем:

Пой = положительный = 0

Экспонент = 5 + 127 = 132 = (1000100)

Мантисса = 000010001100110011001100 ...

S E M = 0 1000100 000010001100110011001100 = (33,1) Десятичное число = (42046666) Hex

1 голос
/ 13 марта 2011

Давайте разберем представление вашего числа на составные части значения с плавающей точкой IEEE-754:

   0 00001101 10110011111111011010011
sign exponent significand

Поле экспоненты равно b00001101, что равно 13. Как оттуда добраться до -114?

Показатель степени числа IEEE-754 сохраняется в представлении смещения , что означает, что к истинному показателю добавляется фиксированное значение, чтобы получить значение, сохраненное в кодировке. Для одиночной (32-битной) точности смещение равно 127. Чтобы получить показатель степени из кодировки, нам нужно вычесть это смещение:

13 - 127 = -114

бит единиц значимости и не сохраняется (он неявно равен 1, если поле экспоненты не равно нулю), поэтому мы вставляем этот бит в значение и получаем значение, которое вы перечислили:

b1.10110011111111011010011 * 2^-114
...