【NOIP初賽篇3】基礎(chǔ)知識(二)原碼、反碼和補碼

一、位和字節(jié)(bit && Byte)

我們都知道計算機上所有的數(shù)據(jù)和運算都是基于二進(jìn)制進(jìn)行的,那么講到數(shù)據(jù)的存儲的時候,我們總是會涉及到數(shù)據(jù)的大小的問題,那么我們都是如何描述數(shù)據(jù)的大小的呢?目前我們最常見的單位是TB,GB,MB,KB等。譬如說一塊硬盤的存儲空間大小是1TB,一條內(nèi)存的大小是4GB,一個文件的大小是8MB等等。這些單位都是描述數(shù)據(jù)大小的,并且他們可以相互轉(zhuǎn)化。

1 PB = 1024 TB ? (1024 = 2^10)

1 TB = 1024 GB

1 GB = 1024 MB

1 MB = 1024 KB

1 KB = 1024 B

以上就是我們最常用的一些單位了,似乎1B 已經(jīng)是最小的表示單位了。等一下,1B真是的是最小的單位了嗎?

答案當(dāng)然是否定的。其實在1B之下,還有更小的單位,1B的全稱是1Byte(1個字節(jié)),一個字節(jié),是由八位的二進(jìn)制數(shù)構(gòu)成的。一位二進(jìn)制,我們稱為比特(bit),這才是計算機里的最小單位,1bit,只能表示0或1,再也找不到比這個更小的單位了。由上面的關(guān)系,我們可以得出

1 B = 8 bit

如果我們再稍加深入研究一下,1B,是由8位二進(jìn)制數(shù)表示,那么它的范圍我們是可以求的。那么它的范圍是多少呢?

1 B = 8 bit

稍加思索,我們可以得到,最小值應(yīng)該是八個都填0,即00000000,換成十進(jìn)制是0;最大值應(yīng)該是八個都填1,即11111111,換成十進(jìn)制是255。因此1B的范圍,其實是0~255,總共有256種可能,也就是2^8。稍加推理,如果有n位,即有2^n種可能。

二、原碼

前面我們提到8位的二進(jìn)制的范圍是0~255,總共256種情況,但是計算機里面,很少這樣表示。那么計算機是如何表示的呢?計算機考慮到正負(fù)數(shù)的情況,因此往往會將最高位(左邊第一位)設(shè)置為符號位,如果是0表示是正,1表示是負(fù)。如果是8位,除去最高位表示符號,其實只剩下7位用來表示數(shù)字的范圍,并且這7位表示的數(shù)字是該數(shù)的絕對值,我們也叫它真值。這樣的表示方式,我們成為原碼。

原碼

用前面的方式,我們可以得出,7位數(shù)的范圍是0~127,結(jié)合符號位,那么8位的原碼可以表示的范圍是-127~+127,其中因為有了+0與-0,所以表示范圍只有255種。原碼的優(yōu)缺點都很明顯,優(yōu)點是一目了然,缺點是是重復(fù)的0。其實還有一個缺點是計算不方便,譬如正負(fù)數(shù)相加時會比較復(fù)雜。

三、反碼

反碼很少用來表示數(shù),它更多時候是充當(dāng)連接原碼與補碼的橋梁。反碼很好理解,同樣的是最高位表示符號,剩下的位數(shù)表示數(shù)值。但是它與原碼不同的是,正數(shù)的反碼與原碼一致,但是負(fù)數(shù),除了符號位保持不變,依舊是1外,數(shù)值位,全部需要反轉(zhuǎn)過來,1變0,0變1,因此我們稱它反碼。下面我們舉例說明:

原碼 00001010 ? ? 表示的是+10,它的反碼就是它本身,00001010

原碼 10001010 ? ? 表示的是 -10,它的反碼是符號位不變,數(shù)值位反轉(zhuǎn),即 11110101

四、補碼

其實在計算機中很少用原碼表示,基本上都是用補碼來表示和計算的,這是因為補碼更有利于計算,補碼可以直接帶上符號進(jìn)行計算。在原碼和反碼中,符號位是不能計算的,譬如正負(fù)數(shù)相加,需要比較它們的絕對值才能得出符號的正負(fù),但是在補碼中,符號位是可以直接計算的,最終的結(jié)果可以直接表示正負(fù),因此補碼比原碼和反碼更方面計算。有興趣的同學(xué)可以繼續(xù)探究,這里不展開。

不論是原碼、反碼、補碼,它們的最高位都是符號位,剩下的位都是數(shù)值位,并且正數(shù),原碼、反碼、補碼都是一樣的,即正數(shù)“三碼合一”。比較復(fù)雜的是負(fù)數(shù),負(fù)數(shù)的補碼,是在它的補碼的基礎(chǔ)上,在末尾加1。下面我們距離說明。

原碼、反碼、補碼

從上面,我們也可以得出,不論是+0,還是-0,補碼都是唯一,均為00000000,這也是為什么用補碼,而不用原碼計算的原因之一。

五、練習(xí)

1、【2009提高組(單選)】在字長為16位的系統(tǒng)環(huán)境下,一個16位帶符號整數(shù)的二進(jìn)制補碼為1111111111101101。其對應(yīng)的十進(jìn)制整數(shù)應(yīng)該是( ? )。

A.19 ? ? ? ? ? ? B.-19 ? ? ? ? ? ? ? ?C.18 ? ? ? ? ? ? ? ?D.-18

2、【2010普及】一個字長為8位的整數(shù)的補碼是11111001,則它的原碼是( ? )。

A.00000111 ? ? ? ? ? ?B.01111001 ? ? ? ? ? C.11111001 ? ? ? ? ? ? D.10000111

3、【2010提高組(多選)】在整數(shù)的補碼表示法中,以下說法正確的是( ? ? )。

A.只有負(fù)整數(shù)的編碼最高位為1

B.在編碼的位數(shù)確定后,所能表示的最小整數(shù)和最大整數(shù)的絕對值相同

C.整數(shù)0只有一個唯一的編碼

D.兩個用補碼表示的數(shù)相加時,如果在最高位產(chǎn)生進(jìn)位,則表示運算溢出

練習(xí)

1、無符號二進(jìn)制數(shù)11001000所表示的十進(jìn)制數(shù)為___________。

A .104 ? ? ? ? ? ?B. 148 ? ? ? ? ? ?C. 172 ? ? ? ? ? ? ? ?D . 200

2、有符號二進(jìn)制數(shù)11001000所表示的十進(jìn)制數(shù)為___________。

A . -200 ? ? ? ? ? ? B. -72 ? ? ? ? ? ? ?C. 72 ? ? ? ? ? ? ?D . 200

3、用16位和8位機器碼分別寫出十進(jìn)制數(shù)+58和-58的原碼、反碼和補碼。


4、若用8位機器碼表示十進(jìn)制數(shù)-101,則原碼表示的形式為( ? ?);

A.11100101 ? ? ? ? ?B.10011011 ? ? ? ? ? ?C.11010101 ? ? ? ? ? ?D.11100111

補碼表示的形式為( ? ?)。

A.11100101 ? ? ? ? ? B.10011011 ? ? ? ? ? ? C.11010101 ? ? ? ? ? D.11100111

5、已知一個字長為8的整數(shù)的原碼是10011010,求它的補碼。


6、已知一個字長為8的整數(shù)的補碼是10011000,求它的原碼。


答案:

真題:1、B ? ? ? ? ? ?2、 A ? ? ? ? ? ? 3、AC

練習(xí): 1、D ? ? ? ? 2、B

3、(1)+58 ? 16位原碼:0000 0000 0011 1010 ? ? 反碼:0000 0000 0011 1010

? ? ? ? ? ? ? ? ? ? 補碼:0000 0000 0011 1010

? ? ? ? ? ? ? ?8位原碼:0011 1010 ? ? ? ?反碼:0011 1010 ? ? ? ? ? ? 補碼:0011 1010

? ? ? (2)-58 ? ? ?16位原碼:1000 0000 0011 1010 ? ? ?反碼:1111 1111 1100 0101

? ? ? ? ? ? ? ? ? ? ? 補碼:1111 1111 1100 0110

? ? ? ? ? ? ? 8位原碼:1011 1010 ? ? ? ? ? ?反碼:1100 0101 ? ? ? ? ?補碼:1100 0110

4、(1)A ?(2) B

5、1110 0110

6、1110 1000

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容