我們都了解2進制8進制和16進制的轉化
也知道了數據在內存中存儲的時候都是二進制的形式存儲的。
那么什么事原碼、反碼和補碼呢 其實他們都是二進制。只不過是二進制的不同的表現形式。
下面舉例子,例如:
1.原碼
最高位表示符號位。剩下的位數,是這個數的絕對值的二進制
就比方說 一個完整的int型變量在內存中占的是4個字節,32位的編譯器中 那么這時候他的二進制表示是00000000 00000000 00000000 00000000
所以
10的原碼就是00000000 00000000 00000000 00001010
那么負數的原碼就是例如
-10的原碼10000000 00000000 00000000 00001010
符號位是第一位 0為正數 1為負數
2.反碼
正數的反碼和其原碼是一樣的
附屬的反碼就是在其原碼的基礎上 符號位不變 其他位取反。
10的反碼就是 00000000 00000000 00000000 00001010 和上面一樣
-10的反碼就是11111111 11111111 11111111 11110101 和上面1和0是相反的
3.補碼
正數的補碼就是其原碼
附屬的補碼就是在其反碼的基礎上+1
10的補碼就是00000000 00000000 00000000 00001010
-10的補碼就是 11111111 11111111 11111111 11111011
總結
10
10的原碼:00000000 00000000 00000000 00001010
10的反碼:00000000 00000000 00000000 00001010
10的補碼:00000000 00000000 00000000 00001010
-10
-10的原碼:00000000 00000000 00000000 00001010
-10的反碼: 11111111 11111111 11111111 11110101
-10的補碼: 11111111 11111111 11111111 11111011
任何數據都是以其二進制的補碼形式存儲在內存中的
為什么數據要以補碼的形式存儲呢?
因為計算機中只有加法沒有減法.為了更加低成本的計算出結果,所以使用補碼來存儲數據.
計算機中只有加法沒有減法.為了更加低成本的計算出結果,所以使用補碼來存儲數據.
下面我們看一個例子 這個例子也是我看的時候特別能幫助我理解的 清晰明了,例如 :
3 + 2;
3 - 2; 這個減法運算對於計算機而言它的理解是 3 + (-2); 1
使用原碼計算.
3的原碼 00000000 00000000 00000000 00000011
-2的原碼 10000000 00000000 00000000 00000010
----------------------------------------------------
10000000 00000000 00000000 00000101 結果是1個負數明顯是不對的
使用反碼計算.
3 的反碼: 00000000 00000000 00000000 00000011
-2的反碼: 11111111 11111111 11111111 11111101
--------------------------------------------------
00000000 00000000 00000000 00000000 0
使用補碼計算
3 的補碼: 00000000 00000000 00000000 00000011
-2的補碼: 11111111 11111111 11111111 11111110
-------------------------------------------------
00000000 00000000 00000000 00000001 1
注:使用補碼來做運算效率是最高的.