Скажем, у меня есть это:
float i = 1.5
в двоичном файле это плавание представлено как:
0 01111111 10000000000000000000000
Я разбил двоичный файл для представления 'со знаком', 'экспоненты' и 'дробных' блоков.
То, что я не понимаю, - то, как это представляет 1.5.
Экспонента 0, после того как Вы вычитаете предвзятость (127 - 127), и часть расстается с неявным продвижением того, 1.1.
Как делает 1,1 масштабируемых ничем = 1.5???
Сначала подумайте о десятичных числах (основание 10): 643,72 это:
или 600 + 40 + 3 + 7/10 + 2/100.
Это потому, что n 0 всегда равно 1, n -1 совпадает с 1 / n (для конкретного случая) и n -m равно идентично 1 / n m (для более общего случая).
Точно так же двоичное число 1.1:
с 2 ] 0 равняется единице, а 2 -1 - половине.
В десятичном формате числа слева от десятичной точки имеют множители 1, 10, 100 и т. Д., Идущие влево от десятичной точки, и 1/10, 1/100, 1/1000, заголовок вправо (т. Е. 10 2 , 10 1 , 10 0 , десятичная точка, 10 -1 , 10 -2 ,. ..).
В системе счисления 2 числа слева от двоичной точки имеют множители 1, 2, 4, 8, 16 и т. Д. В заголовке слева. Цифры справа имеют множители 1/2, 1/4, 1/8 и т. Д., Идущие вправо.
Так, например, двоичное число:
101.00101
| | | |
| | | +- 1/32
| | +--- 1/8
| +------- 1
+--------- 4
эквивалентно:
4 + 1 + 1/8 + 1/32
или:
5
5 --
32
Мантисса существенно сдвинута на показатель степени.
3 in binary is 0011
3>>1 in binary, equal to 3/2, is 0001.1
Вы хотите прочитать это - IEEE 754-1985
Фактический стандарт здесь