2013-06-21 1 views
0

Если бы я хотел представить -2455.1152 как 32-битный, я знаю, что первый бит равен 1 (отрицательный знак), но я могу получить 2455 двоично, как 10010010111, но для дробной части я не слишком конечно. .1152 может иметь бесконечное количество дробных частей. Означает ли это, что для представления дробной части используется только до 23 бит? Итак, поскольку 2445 использует 11 бит, бит 11 - 0 для дробной части?32-битное представление мантиссы 2455.1152

для двоичного представления У меня есть 10010010111.00011101001. Показатель 10. 10 + 127 = 137. 137 в двоичном виде 10001001.

полное представление будет:

это правильно?

ответ

1

Похоже, вы пытаетесь создать собственное представление с плавающей точкой, но вы использовали тег с фиксированной точкой, поэтому я объясню, как преобразовать ваш реальный номер в традиционное представление с фиксированной точкой. Во-первых, вам нужно решить, сколько бит будет использовано для представления дробной части числа. Просто для обсуждения предположим, что 16 бит будут использоваться для дробной части, 15 бит для целочисленной части и один бит зарезервирован для знакового бита. Теперь умножьте абсолютное значение действительного числа на 2^{16}: 2455.1152 * 65536 = 160898429.747. Вы можете либо округлить до ближайшего целого числа, либо просто усечь. Предположим, мы просто усекаем до 160898429. Преобразуя это в шестнадцатеричное число, получаем 0x09971D7D. Чтобы сделать это отрицательным, инвертируйте и добавьте 1 к LSB, а конечный результат - 0xF668E283.

Чтобы преобразовать обратно в реальное число, просто измените процесс. Возьмем абсолютное значение представления с фиксированной точкой и разделим на 2^{16}. В этом случае мы обнаружили бы, что представление с фиксированной точкой равно действительному числу -2455.1151886. Точность может быть улучшена путем округления вместо усечения при преобразовании из реальной в фиксированную точку или путем предоставления большего количества бит для дробной части.