回覆列表
-
1 # 使用者7353409071986
-
2 # maimi32709
單精度符點數的表示格式為:從高到低依次為1位符號位,8位指數位,23位小數位。首先把浮點數按二進位制形式表示(以下過程不要想得太複雜):-3.125 = -11.001首先把小數點往左移,直到小數點的左邊只有一個“1”為止。該例中就是左移一位,變成-1.1001因為小數位是23位,所以現在把小數點的右邊“1001”往後被0,直到補夠23位為止,也就是要補19個0,變成:10010000000000000000000現在計算指數位。剛才說是小數點左移,直到左邊只有一個“1”為止。但是如果浮點數本身是小於1的,比如0.125用二進位制表示是0.001,此時應該右移3位才對。這種情況下把“右移3位”看成是“左移-3位”,指數位的計算方法就是用127加上左移的位數。該例中因為左移了一位,所以指數位是128.注意,原先小數點左邊的還剩下一個“1”是沒用的,指數位就是127加上左移位數。用二進位制表示,指數位是1000000.因為-3.125是個負數,所以符號位為1.因此,-3.125的二進位制形式是:1 10000000 10010000000000000000000寫成十六進位制是:c0480000在程式裡驗證下:float f = -3.125f;int a = (int&)f;cout
單精度符點數的表示格式為:從高到低依次為1位符號位,8位指數位,23位小數位。 首先把浮點數按二進位制形式表示(以下過程不要想得太複雜): -3.125 = -11.001 首先把小數點往左移,直到小數點的左邊只有一個“1”為止。該例中就是左移一位,變成-1.1001 因為小數位是23位,所以現在把小數點的右邊“1001”往後被0,直到補夠23位為止,也就是要補19個0,變成:10010000000000000000000 現在計算指數位。剛才說是小數點左移,直到左邊只有一個“1”為止。但是如果浮點數本身是小於1的,比如0.125用二進位制表示是0.001,此時應該右移3位才對。這種情況下把“右移3位”看成是“左移-3位”,指數位的計算方法就是用127加上左移的位數。該例中因為左移了一位,所以指數位是128.注意,原先小數點左邊的還剩下一個“1”是沒用的,指數位就是127加上左移位數。用二進位制表示,指數位是1000000. 因為-3.125是個負數,所以符號位為1.因此,-3.125的二進位制形式是: 1 10000000 10010000000000000000000 寫成十六進位制是:c0480000 在程式裡驗證下: float f = -3.125f; int a = (int&)f; cout<< hex << a <<endl; 結果正確。="">