1 回答

TA貢獻1806條經驗 獲得超8個贊
如果你知道為什么32位浮點數的指數偏移量是127,你就能知道為什么64位浮點數的指數偏移量是1023。
在32位浮點數中,指數位有8位,它能表示的數字是從0到2的8次方,也就是256。但是指數有正有負,所以我們需要把256這個數字從中間劈開,一半表示正數,一半表示負數,所以就是-128到+128。哦,不對,忘記了中間還有個0,所以只能表示-128到127這256個數字。那么怎么記錄負數呢?一種作法是把高位置1,這樣我們只要看到高位是1的就知道是負數了,所謂高位置1就是說把0到255這么多個數字劈成兩半,從0到127表示正數,從128到255表示負數。但是這種作法會帶來一個問題:當你比較兩個數的時候,比如130和30,誰更大呢?機器會覺得130更大,但實際上130是個負數,它應該比30小才對啊。所以為了解決這個麻煩,人們發明了另外一種方法:干脆把所有數字都給它加上128得了,這樣-128加上128就變成了0,而127加上128變成了255,這樣的話,再比較大小,就不存在負數比正數大的情況了。
但是我要得到原來的數字怎么辦呢?這好辦,你只要再把指數減去128就得到了原來的數字,不是嗎?比如說你讀到0,那么減去128,就得到了負指數-128,讀到255,減去128,就得到了127。
那為什么指數偏移是127,不是128呢?因為人們為了特殊用處,不允許使用0和255這兩個數字表示指數,少了2個數字,自然就只好采用127了。
同理,64位浮點數,指數位有11位之多,2的11次方是2048,劈一半作偏移,可不就是1024嗎?同理,去掉0和2048這兩個數字,所以就用1023作偏移了。
80位擴展雙精度,一個道理。
添加回答
舉報