Как уже было сказано, 5.2 представлен как знаковый бит, показатель степени и мантисса. Как вы кодируете 5.2?
5 легко:
101.
Остальные 0,2 равны 1/5, поэтому разделите 1.00000...
(гекс) на 5, и вы получите 0.3333333...
(гекс).
(За этим можно легче следовать, если учесть на один бит меньше: 0.FFFF...
& rarr; F / 5 = 3
, поэтому легко увидеть, что 0.FFFF... / 5 = 0.33333...
. Этот один пропущенный бит не имеет значения при делении на 5, значит 1.0000... / 5 = 0.3333...
тоже).
Это должно дать вам
0.0011001100110011001100110011...
Добавьте 5, и вы получите
101.00110011001100110011... exp 0 (== 5.2 * 2^0)
Теперь сдвиньте его вправо (нормализуйте его, то есть убедитесь, что старший бит находится непосредственно перед десятичной запятой) и соответственно отрегулируйте показатель степени:
1.010011001100110011001100110011... exp +2 (== 1.3 * 2^2 == 5.2)
Теперь вам нужно только добавить смещение 127 (т.е. 129 = 0b10000001
) к показателю степени и сохранить его:
0 10000001 1010 0110 0110 0110 0110 0110
Забудьте верхнюю часть 1 мантиссы (которая всегда должна быть 1, за исключением некоторых специальных значений, поэтому она не сохраняется), и вы получите:
01000000 10100110 01100110 01100110
Теперь вам нужно только выбрать маленький или большой порядковый номер.
Это не совсем то, как это работает, но это более или менее то, что происходит, когда число, подобное 5.2, преобразуется в двоичное.