為了方便,本文假設系統為4位系統。原碼即我們熟知的十進位制轉二進位制,不過最高位為符號位,1代表負數。
如2的原始碼是0010,-2的原碼是1010,負數的原碼不能直接計算,比如2-2應該為0,但按照原始碼的二進位制計算為1100(-4)。因此計算時需要一種新的表示方法,那就是補碼。
4位的二進位制,最大的數是1111,再加1後即溢位,10000的最高位會丟失,因此它就是從0000-1111的迴圈。想象一下,我們加上乙個負數可以理解為在刻度線上左移一段,但我們也可以向右移動(加上某個數)得到相同的結果。
還是拿-2舉例,往左移動2格和往右移動14格得到的結果是一樣的,因此14就是-2的補碼,我們需要減乙個數時,加上它的補碼即可。
可以發現,補碼的最高位也可以用於表示符號,並且1000可以用來表示-8,而在原碼中1000是0。
補碼的計算:
補碼的計算也十分方便。我們需要計算乙個負數的補碼時,也即是計算它的正數向右移動多少發生溢位。
還是以-2為例:
-2的正數是2:0010,按位取反後是1101,兩者加起來是:1111;在這基礎上再加1,即發生了溢位。
因此乙個負數補碼的計算是:其正數的原碼按位取反加一。
參考:帶你認識cpu第04期——cpu是怎麼計算減法的
原碼 反碼與補碼
在計算機內,定點數有3種表示法 原碼 反碼和 補碼。所謂原碼就是 二進位制定點表示法,即最高位為符號位,0 表示正,1 表示負,其餘位表示數值的大小。反碼表示法規定 正數的反碼與其原碼相同 負數的反碼是對其原碼逐位取反,但符號位除外。補碼表示法規定 正數的補碼與其原碼相同 負數的補碼是在其反碼的末位...
補碼 原碼與反碼
古人說得好 溫故而知新 可惜現在都忙於 知新 沒有太多的時間去回顧原來的知識了。直到今天,遇到了實際問題,才突然感覺到原來很多東西在記憶中已經非常模糊,記不清了。溫故 系列主要是以的文章 觀點為主,也就是說多數將會是轉貼文章,因為這些基礎知識總會得到專家關注的,而且專家的解釋也會比我清楚得多。原碼 ...
原碼,反碼與補碼理解
1.寫作目的 平時學習總結的學習筆記,方便自己理解加深印象。同時希望可以幫到正在學習這方面知識的同學,可以相互學習。新手上路請多關照,如果問題還請不吝賜教。2.前置知識 位元組 位 二進位制數 計算機儲存資料使用位元組進行儲存,機器有32位,64位為乙個最小儲存單元,1個位元組為8位,那麼32位機器...