1. 程式人生 > >浮點數在記憶體中的表示移位儲存難點的理解

浮點數在記憶體中的表示移位儲存難點的理解

0 000000 0~ 0 111111 1

即+ 0 到 127,

第二個區間:

1 000000 0~ 1 111111 1

即 -0 到 - 127,

大家看到這裡發現問題了,怎麼有兩個零,一個正零,一個負零呢,好啦,我們再馬上來看看使用移位儲存方式會有什麼效果,我們知道移位儲存我們要加 127,為什麼要加127,大家看看下面的例子就明白了,請看:

127 使用這個新生成的位元組來表示,則是:

0 111111 1 ,

我們來多舉幾個例子,大家馬上就明白了,請看:

如果我們要表示 0,則有 0+127=127 即 0 111111 1

0 000000 0 + 0 111111 1= 0 111111 1

我們要表示1,則有 1+127=128 即 1 000000 0

0 000000 1 + 0 111111 1= 1 000000 0

我們要表示 2,則有 2+127=129 即 1 000000 1

0 000001 0 + 0 111111 1= 1 0000001

………………………………………………………………

我們要表示 128,則有 128+127=255 即 1 111111 1

1 000000 0+ 0 111111 1= 1 111111 1

這個128是我們能夠使用 8位二進位制移位儲存演算法表示的最大的正數了,再大就溢位了。 同樣,我們來看看負數:

我們要表示 -1時,則有( -1) +127=127-1=126 即 0 111111 0

0 111111 1 - 0 000000 1= 0 111111 1

我們要表示 -2時,則有( -2)+ 127=127-2=125 即 0 111110 1

0 111111 1 - 0 000001 0= 0 111110 1

……………………………………………………………………………………………… 我們要表示 -127時,則有(-127)+127=127-127=0 即 0 000000 0

0 111111 1 - 0 111111 1= 0 000000 0

這-127,是我們能夠使用 8位二進位制採用移位儲存所能表示的最小的負數了,再小就溢位。

由上面的 7個例子,我們可以得出規律,採用移位儲存技術,我們可以使用 8位二進位制來表示從 -127~128 共計 127個負數+零(0)+128個正數總共 256個數,看來使用移位儲存即沒有+0和-0的問題,又充分的使用這個新生成的 8位二進位制數來最大限度的表示單精度浮點數的冪指數(階碼),是非常合理的,只是這裡大家需要注意,在使用移位儲存技術時,得到的兩個區間: