本文隨便聊一下計算機表示數據的方式,也算是總結一下以便未來回顧。若有紕漏錯誤請高人指點、共同進步。編碼
1*2^7 + 1*2^1 = 130
顯然不是2。由於首位是1,因此爲負值,而後計算後面位按權展開結果爲-2。符號位不變其他位取反後+1
。若是計算1+(-1)那麼結果是00000001(+1原碼)+10000001(-1原碼) = 10000010(原碼) = -2
很明顯結果是不對的。1+(-1)= 00000001(原) + 10000001(原) = 00000001(反)+11111110(反) = 11111111(反) = 10000000(原) = -0
注意這裏的0是有符號位的是個負值。這與咱們數學運算規則不符(雖然現實中0不分正負可是計算機中正確結果應該是+0)移碼主要是爲了便於計算機運算指數而引進的,比咱們運算一個加法1.1*2^-1 + 1.2*2^3
,根據運算規則來說底數2相同時,須要先把指數處理爲相同時才能進行1.1和1.2的加法運算。0.00011*2^3 + 1.2*2^3
這樣運算就簡單多了。因此爲了進行運算就須要比較指數部分,指數-1和3進行比較是若是是原碼編碼的方式去處理,就會造成10000001和00000011進行比較的結果,顯然這麼一比是-1>3的,計算機沒法進行準確運算。若是用移碼的形式,好比讓指數-1和3同時+4,就成了3和7的比較,很容易進行比較出來大小方便對齊最大冪進行運算。因此移碼的思想就是這樣由來的。code