我們以8位二進制為例,計算5-2=3,用二進制表示為:
00000101(原) 10000010(原)
=00000101(原) 11111101(反)
=00000101(原) 11111110(補)
=00000011
1、為什麼要取反再加一?
仍以上面的8位二進制數為例,模是100000000,即2^8=256,十進制數2的8位二進制數表示是00000010,取反得到11111101,二者相加:00000010(原) 11111101(反)=11111111,而11111111 1=100000000(模),
由以上可以看出:二進制數原碼加上取反後得到的值再加一就剛好得到模。而已知原碼 補碼=模,因此能夠得出結論:補碼等于原碼取反加一,這是計算補碼最簡單的方法。在這個過程中,反碼沒有什麼實質意義,它隻是計算機為了計算補碼時的一個中間量。
2、為什麼符号位可以參與運算,和其它位統一處理?
在計算機中正數和負數存儲方式是不同的,我們通過觀察二進制數第一位是0還是1可以知道這個數是正數還是負數。如果它的第一位是0,那麼它就是正數原碼,如果它的第一位是1,那麼它就是負數補碼。這裡的符号位其實是算出來的,所以它可以參與運算。
我們仍以8位二進制為例,計算2-5=-3,用二進制表示為:
00000010(原) 10000101(原)
=00000010(原) 11111010(反)
=00000010(原) 11111011(補)
=11111101
計算結果11111101第一位為1,那麼這個數值是負數補碼,反求原碼=(00000010)反 1 =00000011= 十進制數3,由此可知,11111101表示的是負數的3,在運算過程中我們沒有考慮符号位,僅用單純的加法運算進行運算,而得到的結果11111101也沒有人為去添加一個符号位,符号位是計算所得的,因為在計算過程中存在第一位為0則是正數,為1則是負數這個規律,于是我們認定第一位為符号位,也就是先有規律之後才有規定。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!