原碼和補碼

2021-09-07 11:05:09 字數 700 閱讀 1958

+1-1

正數3碼合一

原碼0000_0001

1000_0001

最高位0表示正數,1表示負數。原碼計算得原碼

反碼0000_0001

1111_1110

除最高位之外取反,反碼計算得反碼

補碼0000_0001

1111_1111

反碼+1,符號位不變,符號位只在兩個補碼運算時改變,補碼計算得補碼

自問1:為什麼不直接用原碼進行加減?

答:1+(-1)=【0000_0001】-【1000_0001】==-2;減法運算會出錯。

自問2:反碼進行加減會有什麼缺點?

答:1+(-1)= [0000 0001]反 + [1111 1110]反=-0;會有+0和-0

自問3:補碼運算好在哪?

答:1+(-1)=[0000 0001]補 + [1111 1111]補= [0000 0000]補=0;消除±0

-1-127的結果應該是-128, 在用補碼運算的結果中, [1000 0000]補 就是-128. 但是注意因為實際上是使用以前的-0的補碼來表示-128, 所以-128並沒有原碼和反碼表示.(對-128的補碼表示[1000 0000]補算出來的原碼是[0000 0000]原, 這是不正確的)

原文:

原碼和補碼

我不想介紹什麼原碼和補碼的概念,只是為了自己重拾程式設計的一點小積累。原碼 原碼表示法在數值前面增加了一位符號位 即最高位為符號位 正數該位為0,負數該位為1 0有兩種表示 0和 0 其餘位表示數值的大小。正數的原碼為其本身,負數的原碼是取絕對值後將最高位變1 如何計算補碼呢?正數的補碼為其本身 負...

原碼 反碼和補碼

數值有正負之分 計算機就用乙個數的最高位存放符號 0為正 1為負 這就是機器數的原碼了 假設機器能處理的位數為 8.即字長為 1byte,原碼能表示數值的範圍為 127 0 0 127 共256個.有了數值的表示方法就可以對數進行算術運算 但是很快就發現用帶符號位的原碼進行乘除運算時結果正確 而在加...

原碼 反碼 和 補碼。

這裡只講下自己對反碼的理解。大家都知道使用反碼表示負數有兩個優點,1.可以使得減法可以和加法一樣。2.符號位也參與了運算。那這是為什麼呢?下面可以進行一些簡單的數學推導 根據反碼定義,對於負數,反碼是除符號為以外取反 1。例如,4 變換步驟如下。a 4 0 000 0100 b 取反 0 111 1...