計算機中的原碼-反碼-補碼

計算機中二進制分為原碼,補碼,反碼,運算及存儲時都是按照補碼進行的,可以將補碼轉回原碼,再轉十進制,就知道這個補碼代表的十進制數是多少了。

在原碼,反碼,補碼中,其中最高位為符號位,0代表正數,1代表負數,非符號位為該數字絕對值的二進制表示。

如:

127的原碼為0111 1111

-127的原碼為1111 1111

其中

原碼:二進制表示。二進制首位是符號位,0為正,1為負。

反碼:正數,反碼和原碼一樣;負數,符號位不變,其他各位取反。

補碼:正數,補碼和原碼一樣;負數,反碼末位加1,有進位則進位,但不改變符號位(符號位不變很重要)。

例如,-7的補碼:因為是負數,則符號位為“1”,整個為1000 0111;其餘7位為-7的絕對值+7的原碼

1000 0111按位取反為1111 1000;再加1,所以-7的補碼是1111 1001。

補碼轉回原碼的步驟為:

(1)如果補碼的符號位為“0”,表示是一個正數,所以補碼就是該數的原碼。

(2)如果補碼的符號位為“1”,表示是一個負數,求原碼的操作可以是:符號位不變,也就還是1,其餘各位取反,然後再整個數加1。

例如:-7的補碼是1111 1001 按位取反為1000 0110 再加1,所以-7的原碼是1000 0111,和上面的例子對比是正確的。

得到原碼後就可以按照如下的公式轉換為十進制:

二進制轉十進制(符號位不參與計算)

1.從左邊第一位數乘以2的n-1次方(冪),n代表該數字從右到左數起的位數。加上從左邊第二位數乘以2的n-2次方。

依此類推,一直到最後一個數。

例:-7的原碼是1000 0111 對應的十進制是:1*2(3-1)次方+1*2(2-1)次方+1*2(1-1)次方=4+2+1=7 再加符號位則為 -7


分享到:


相關文章: