補碼如何實現 由減到加:
首先,我想講 一個故事:
話說,戰國時期 季梁遇到一個 趕着車向北走的人,於是季梁就問他,“你要去哪里啊?” 那人就說 "楚國"於是季梁又問,"可是
楚國不是在南方嗎?" 那人又說“沒關系,我的馬好。"
其實,那人就給出了我們補碼的思路,你要去南方,可以直接向南方去,也可以一路向北,繞地球一圈,從而到達楚國。
補碼也是這樣 ,因為計算機的定長表示,所以補碼的取值范圍是有周期的
如 : 0111 1111 的真值是 127,再加一的話,就是 1000 0000,真值為 -128 了。
為了便於理解,可以用時鍾計算(12小時制的)
9要撥到5,可以減4,也可以加8 ,所以此時 -4和+8是等價的 。
那么 ,我們可以認為 8是4的補碼
那么這兩個數有什么聯系呢? 沒錯他們數值和就相當於繞了時鍾一圈,用數學表達的話就是 兩數的絕對值相加 為 12
類比到補碼 首先的明白一圈是多少 ?
在八位的補碼中,有一位是表示符號位,所以表示數值的有 7 位,即 2^7 = 128
於是用 128減真值 也就是所謂的 數值位取反,末位加一 的操作了。
再回到時鍾, 9-4=9+[4]補=(9+8)%12 因為他會多走一圈,所以我們再在這里還要 %12,而計算機補碼是有周期的,不用這一步
那么現在我們就可以推出 x-y=x+[y]補
補碼運算規則:
加法規則:[x+y]補 = [x]補 + [y]補
減法規則:[x-y]補 = [x]補 + [-y]補
1,[-y]補 可由: [y]補 全部取反末位加1
2,溢出:運算結果超出可表示范圍
3,溢出的判斷:最高兩位向上進/借位不同則該運算溢出
4,補碼求原碼:與原碼求補碼操作一樣 ,a-b=c,則a-c=b ,另外也可以逆推 -1再取反
========== ======== ======== ======== ====== ===== ===== === == =
白鹿洞二首·其一 王貞白(唐)
不是道人來引笑,周情孔思正追尋。