2013-03-28 2 views
0

Я впервые изучаю переход от десятичных чисел к стандарту поплавка IEEE 32 и в настоящий момент путаюсь, потому что вижу несколько лекционных слайдов и примеры из университетов, которые делают это в одну сторону, а затем другие, кто это делает другой путь. В частности, с получением 1 и 0 для десятичной дроби. Итак, если у вас есть номер, например, 1234.567Преобразование с плавающей запятой IEEE 32 бит

вы конвертируете 1234 в двоичный файл без проблем, но тогда я очень смущен тем, как идти о преобразовании десятичной дроби. Первоначально Я видел, что вы идете

.567 * 2 = 1.134 = 1 
.134 * 2 = .268 = 0 
.268 *2 = .536 = 0 

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

10011010010 for 1234 
10011010010.100 
1.0011010010100 x 2^(10). 

127 +10 = 137. 137 in binary is 10001001. 

So 32 bits of binary is 

0 for sign| 10001001 for exp| 0011010010100 0000000000 

32 бит все вместе. Это верно?

+0

ли целая часть 1234 (как в штучной упаковке, например) или 12345 (как и в первых двух пунктах)? – jerry

+0

Ничего себе, извините, что число, которое я пытаюсь преобразовать, составляет 1234.567. – Tastybrownies

+0

На самом деле я думаю, что понял. Если я могу подсчитать количество чисел справа от 1, когда я сначала конвертирую левое число в двоичный, я знаю, сколько раз мне приходится умножать десятичный результат на 2. Как в этом примере, если у меня есть 10 чисел справа от 1, мне нужно 13, чтобы заполнить 23 надел для мантиссы! – Tastybrownies

ответ

0

Второй подход абсолютно хорош. Но при вычислении двоичного кода на 0,567, если вы не достигли конечной точки (т. Е. 0,0), то, по крайней мере, до 23 бит (длина мантиссы).

для вашего десятичного 1234,567

 
binary of 1234  = 100 1101 0010 
binary of 0.567 = .1001 0001 0010 0110 1110 100 (up to 23 bit)
binary of 1234.567 = 100 1101 0010.1001 0001 0010 0110 1110 100
= 1.00 1101 0010 1001 0001 0010 0110 1110 100 * 2^10 Hence, Exponent = 10 Normalized Mantissa (with adjusted length 23 bit) = 001 1010 0101 0010 0010 0100
Sign bit = 0 Hence 32 bit floated conversion :
0 - 1000 1001 - 001 1010 0101 0010 0010 0100
Смежные вопросы