c - понимание бинарной модели с плавающей запятой - PullRequest
3 голосов
/ 01 октября 2019

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

Таким образом, учитель представляет 284 как 100011100 = 1,000111 x 2 ^ 8. Я понимаю, что битовый знак равен 0, потому что это положительное число. Я понятия не имею, откуда взялся 8-битный показатель степени 00001000, а 23-битная мантисса представляется более крупным представлением 1.000111, которое заполняет 23 бита. учитель смог заполнить график / получить значения от преобразования 100011100 в 1,000111 x 2 ^ 8? Я пытался смотреть учебники и смотреть на другие сайты, но я все еще в замешательстве.

Буду также признателен, если кто-нибудь сможет объяснить, как учитель перешел от значений в первом ряду к изменению их на 8-Битовая экспонента 10000111 и 23-битная мантисса 000 1110 0000 0000 0000 0000, как показано в 3-й строке. Буду признателен за любую помощь, я часами смотрю на эту часть своих заметок, но просто не могу понять логику всего этого. Все это кажется таким сложным и подавляющим.

enter image description here

Ответы [ 3 ]

1 голос
/ 01 октября 2019

Таким образом, учитель представляет 284 как 100011100 = 1,000111 x 2 ^ 8. Я понимаю, что битовый знак равен 0, потому что это положительное число. Я понятия не имею, откуда взялся 8-разрядный показатель 00001000,…

Показатель степени 2 в 1.000111 × 2 8 равен 8. 8 в двоичном виде - 1000,или 00001000.

Позже к показателю степени прибавляется 127. Это просто вопрос того, как хранится экспонента. Вместо любого другого метода представления положительных и отрицательных показателей, это просто правило, что 127 добавляется к показателю перед его сохранением. Поэтому, если показатель степени равен 8 (00001000), мы добавляем 127, чтобы получить 135 (10000111), и сохраняем его в поле показателя. Это дает нам способ хранения отрицательных показателей. Если показатель степени равен -1, мы сохраняем -1 + 127 = 126. Если показатель равен −126, мы сохраняем −126 + 127 = 1.

Буду также признателен, если кто-то сможет объяснить, какучитель перешел от значений в первом ряду к изменению их на 8-битный показатель 10000111 и 23-битный мантисса 000 1110 0000 0000 0000 0000, как показано в 3-м ряду.

Для нормальных чисел мы удаляем первый бит из значимого и 1 и сохраняем следующие 23 бита в поле значимого. Таким образом, при значении 1.000111 мы удаляем начальную 1, чтобы получить .000111, а затем сохраняем 000111 с последующими нулями. (Нормальным числом является любое представимое число на уровне или выше минимальной шкалы экспоненты для формата, которое составляет 2 -126 для 32-битного двоичного формата IEEE-754. Для субнормальных чисел ведущий бит сохраняетсяв явном виде, с изменением способа обработки показателя.)

Сноска

1 «Значение» - предпочтительный термин для дробной части представления с плавающей запятой,«Мантисса» является старым термином для дробной части логарифма. Значения линейные. Мантиссы логарифмические.

0 голосов
/ 04 октября 2019

// без знака int s ... x ... n ...

s xxxxxxxx nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

float == (- 1) ^ s * (1 + n * 2^ -23) * (2 ^ (x - 127))

0 голосов
/ 01 октября 2019

ОК, поэтому первый бит - это знак . Если этот бит установлен, то число является отрицательным.

После этого следующие 8 битов (в float) являются показателем . 127 вычитается из показателя степени, и оттуда число умножается на 2^exponent.

Наконец, 23 гнезда - это мантисса. Это сложно, но по сути, оно содержит десятичную часть числа.

Я нашел это видео на YouTube с информацией о том, как преобразовать число в формат IEEE-754 float. Вы должны взглянуть на это: Десятичное число в IEEE 754 Представление с плавающей точкой .

...