負數二進位制補碼的推導

2022-11-24 21:32:00 字數 1245 閱讀 5125

今天在看mit公開課【程式設計正規化】的時候發現二進位制碼補碼只是不是很清楚,於是推一下

負數 原碼 推 補碼

注:t(原碼),a(反碼),c(補碼)

拿15舉例   15:   00000000 00001111 (t)

要推出-15 ,因為   15 + (-15)= 0

15:00000000 00001111 ,0 :00000000 00000000

所以-15:

+?  (-15)

=因為:

11111111 11111111 + 1 = 00000000 00000000 

所以我們先算出和為11111111 11111111的數,然後+1即可,也就是下面的a

+a  =即:

00000000 00001111 各位取反:11111111 11110000(a,其實就是反碼)

於是:+

11111111 11110000(a)

=而a + 1 ,即 11111111 11110001 ,也就是與15相加得0的值

於是就可得出:

+11111111 11110001 (c)

=而c 就是負數的補碼

負數原碼求補碼     t --------> a  ------> a+1    =  c

負數補碼求原碼同理 c -------> c反 ------> c反+1  =  t

對於有符號的整數:

原碼t    反碼a    補碼c 

正數  47  00101111  00101111  00101111

負數  -47  10101111  11010000  11010001

看兩個例子:

- 38 + 25 = -13

原碼:-38: 10100110 

+25:00011001

補碼:-38:11011010

+25: 00011001

=  -13: 11110011(補碼)->10001101(原碼)

38 - 25 = 13

原碼:38: 00100110

-25:10011001     

補碼:38: 00100110

-25:11100111

13: 00001101(補碼)->00001101(原碼)