原碼,反碼與補碼理解

2022-04-11 02:20:40 字數 1589 閱讀 8179

1. 寫作目的

平時學習總結的學習筆記,方便自己理解加深印象。同時希望可以幫到正在學習這方面知識的同學,可以相互學習。新手上路請多關照,如果問題還請不吝賜教。

----------

2. 前置知識 位元組 → 位 → 二進位制數

計算機儲存資料使用位元組進行儲存,機器有32位,64位為乙個最小儲存單元,1個位元組為8位,那麼32位機器乙個儲存單元儲存4個位元組,64位機器乙個儲存單元為8個位元組。計算機使用二進位制來表示資料,1位代表乙個二進位制數,要麼是1,要麼是0。

3. 引出原碼

既然是資料,那麼就有大小,就需要對數值進行運算。我們用真值來表示資料的大小,正負。

十進位制:+8 = 二進位制:+1000

十進位制:-6 = 二進位制:-0110

+1000,-0110既是真值,但是計算機在儲存資料時沒有單獨儲存數值的正負,而是同樣用1,0來儲存負,正,那麼這就是原碼表示。

十進位制:+8 = 二進位制:01000

十進位制:-6 = 二進位制:10110

表示是沒有問題?但是問題又出現了,那就是如果是同符號運算,我們很好算,如果符號不相同的兩個數相加,我們首先要判斷哪個數更大,然後相減得到結果,再用大數的符號標註,這樣每次算更加麻煩。而且計算機沒有設計減法運算,只有加法運算,因為加法運算更加快速。我們如何來實現2個數的減法。下面就是加法轉減法的思路:

4. 同餘模數

以表盤為例:表盤有12個刻度,走完12個刻度後回到原點。如果時針指向3點,我想回撥到2點,那麼我的方法有,① 直接回撥乙個刻度,② 向前撥11個刻度。方法 ① 很好理解,為什麼方法 ② 同樣可以,明明是向前撥也達到了同樣的效果,12就是模,當撥夠了12個刻度,就捨去了12,也就是捨去了模。3+11 = 14,14 - 12 = 2,所有同樣是2點。在這裡 1 ≡ 11是同於模數,模為12。 又因為 1 ≡ 13 ≡ 25,所以正數的同於模數就是它本身。這些都有相應的計算同餘模數的公式 。

有了以上的知識,我們就能往下繼續了。我們可以應用同餘模數來把加法變成減法,比如:

01000 - 00010;我們需要把 減 00010 變為 加上乙個數,那麼加上數即為這個數的同餘模數。按照上邊的公式,同餘模數 = $2^4+1$ - 00010 = 100000 - 00010 = 11111 + 00001 - 00010 = 11111 - 00010 + 00001 = (1 x1x2x3x4)+ 00001。 通過變形,我們發現如果想要求得負數的同餘模數,我們只需要保證這個數的符號位不變,其他位取相反數(因為1減去乙個數,可以看成是求這個數的相反數),最後+1,即可。

5. 重點來了

有了這個規律,我們就引出了反碼,補碼。反碼就是原碼符號位不變,其它位取反,他就是我們通向補碼的中間產物。那麼我們的補碼就是我們的同餘模數,加減運算使用補碼完成。小弟不才,原碼,反碼,補碼的來龍去脈我目前只能理解到這樣的程度。

6. 畫龍點睛

真值為0時: +0000,-0000,有2中表現形式;

原碼: 00000, 10000,有2中形式;

反碼: 00000, 11111,有2中形式;

補碼: 00000,10,0000(0,0000) 一種形式。

我們看出 原碼有2個0,反碼有2個0,補碼只有乙個0。

《計算機組成原理第二版-唐朔飛》

原碼 反碼與補碼

在計算機內,定點數有3種表示法 原碼 反碼和 補碼。所謂原碼就是 二進位制定點表示法,即最高位為符號位,0 表示正,1 表示負,其餘位表示數值的大小。反碼表示法規定 正數的反碼與其原碼相同 負數的反碼是對其原碼逐位取反,但符號位除外。補碼表示法規定 正數的補碼與其原碼相同 負數的補碼是在其反碼的末位...

補碼 原碼與反碼

古人說得好 溫故而知新 可惜現在都忙於 知新 沒有太多的時間去回顧原來的知識了。直到今天,遇到了實際問題,才突然感覺到原來很多東西在記憶中已經非常模糊,記不清了。溫故 系列主要是以的文章 觀點為主,也就是說多數將會是轉貼文章,因為這些基礎知識總會得到專家關注的,而且專家的解釋也會比我清楚得多。原碼 ...

再度理解原碼 反碼 補碼

很早就開始接觸這些熟悉又陌生的關鍵字,但是,時不時還會有錯 看定義 正數的原碼 反碼 補碼形式一致,負數的反碼為原碼的數值位取反,補碼為反碼 1也即是原碼的數值位取反再 1,計算機中以補碼表示資料和運算 舉例 34原碼 反碼 補碼 00100010 34原碼 10100010,反碼 11011101...