12(10進位) = 0000 1100(2進位)
1補數: 1111 1111 – 0000 1100
= 1111 0011
或者說取反(0變1,1變0)
2補數: 1111 0011 + 1
=1111 0100 (十進制-12)
1111 0100如何還原為-12?
最左邊第一個1代表負號,先不看
剩下111 0100 (7個數字)
111 1111(7個1) – 111 0100
=000 1011 (或者說取反)
再加1
=000 1100
=1*2**3+1*2**2
=12(10進位)
別忘記一開始最左邊的1代表負號
推薦hahow線上學習python: https://igrape.net/30afN
在計算二進制數字的二補數時,會將數字進行位元反相運算,再將結果加1,不考慮溢位位元(一般情形,溢位位元會為0),就可以得到該數字的二補數。
以下考慮用有符號位8位元二進位表示的數字5:
- 0000 0101 (5)
其最高位元為0,因為此數字為正數。若要用二補數系統表示 -5,首先要將5的二進位進行反相運算〔1變為0,0變為1 〕:
- 1111 1010
目前的數字是數字5的一補數,因此需要再加1,才是二補數:
- 1111 1011 (-5)
以上就是在二補數系統中 -5的表示方式。其最高位元為1,因為此數字確實為負數。
一個負數的二補數就是其對應的正數。以 -5為例,先求數字的一補數:
- 0000 0100
再加一就是 -5的二補數,也就是5。
- 0000 0101 (5)
簡單來說,數字a(正負數皆可)的二補數即為 -a。
以上結論:
含最高位一起反向後(1補數)+1(2補數),
正負號就會顛倒
推薦hahow線上學習python: https://igrape.net/30afN