--------------------------------------------------------------------------------
在VC6.0----float環境一共32位
其中第一位是符號位 第二到第9位中間8位為小數點位置(指數以127的二進制為原點向下為負指數 向上為正指數)后面23位為數據位。
S EEEEEEEE DDDDDDDDDDDDDDDDDDDDDDD
例如 -12.5的十六進制表示
1.先把整數部分換成二進制 12的二進制為:00001100
2.小數部分換成二進制 方法為小數*2 取整 為1
00001100.1
小數點左移3位
00001100.1 因為-12.5是負數所以 符號位為1 ,小數點左移3位 則小數點位置為01111111+3 后面數據位移到后面的23位中不夠則補0
1 10000010 10010000000000000000000
1100 0001 0100 1000 0000 0000 0000 0000
C 1 4 8 0 0 0 0
則-12.5在內存中(小尾排法)表示就為:00 00 48 C1
寫程序驗證下:
-----------------------------------------------------------------------------
另外我補充一下:
①.指數位是從127為原點,比如10^3(10的3次方)
指數部分的二進制轉換則為:127+3 = 130 ---->10000010
如果是10的-3次方則:
127-3 = 124 ------>1111100
③.還一點就是
12.3->1100.1
左移了3位 為1.1001整數部分的1不會存儲到float類型的變量塊中
因為最高位的2進制總是為1 考慮到節約空間 以便能存儲更高的精度
最后不足23位的地方全部補0
③.int->float 會丟失精度
因為int數據存儲區域是32位 而float是23位
所以會丟失精度
float->int同樣會丟掉小數部分的精度
平時寫程序的 時候要盡量的避免 數據類型的隱式轉換
?
?
用WinHex查看內存塊
?
?
當然 你也可以用其他的方式來驗證
--------------------------------------------------------------------------------