注意:下面內容中的數字均用8位二進制數表示,
原碼
- 最高位(最左邊)代表符號位,
0代表正數,1代表負數,
例:
1 的原碼是 0000 0001
-1 的原碼是 1000 0001
反碼
-
正數的反碼與原碼一致,
-
負數的反碼是對原碼按位取反,只是最高位(符號位)不變,
例:
1 的反碼是 0000 0001
-1 的反碼是 1111 1110
補碼
-
正數的補碼與原碼一致,
-
負數的補碼是該數的反碼加1,
-
計算機數字運算均是基于補碼的,
-
單位元組(8位)運算的模為
256=2^8,負數的補碼為模減去該數的絕對值,
例:
1 的補碼是 0000 0001
-1 的補碼是 1111 1111
補碼優勢
-
如果計算機內部采用原碼來表示數,那么在進行加法和減法運算的時候,需要轉化為兩個絕對值的加法和減法運算,計算機既要實作加法器,又要實作減法器,代價有點大,
-
化減為加,舉一個生活中的例子來說明這個問題:時鐘一圈是360度,當然也存在365度,但其實它和360度是一樣的;相同的道理,-30度表示逆時針旋轉30度,其與順時針旋轉330度是一樣的;
這里數字360表示時鐘的一圈,在計算機里類似的概念叫模,它可以實作化減為加,本質上是將溢位的部分舍去而不改變結果,
實體
15 => 原碼: 0000 1111 => 反碼: 0000 1111 => 補碼: 0000 1111
+ (-5) => 原碼: 1000 0101 => 反碼: 1111 1010 => 補碼: 1111 1011
---------------------------------------------------------------
按反碼計算后結果: 0000 1010
轉換為十進制是: 10
參考
-
https://www.jianshu.com/p/36ec7a047f29
-
https://zhidao.baidu.com/question/401222353.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/270716.html
標籤:其他
