
一、位和字節(jié)(bit && Byte)
我們都知道計(jì)算機(jī)上所有的數(shù)據(jù)和運(yùn)算都是基于二進(jìn)制進(jìn)行的,那么講到數(shù)據(jù)的存儲(chǔ)的時(shí)候,我們總是會(huì)涉及到數(shù)據(jù)的大小的問題,那么我們都是如何描述數(shù)據(jù)的大小的呢?目前我們最常見的單位是TB,GB,MB,KB等。譬如說一塊硬盤的存儲(chǔ)空間大小是1TB,一條內(nèi)存的大小是4GB,一個(gè)文件的大小是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)然是否定的。其實(shí)在1B之下,還有更小的單位,1B的全稱是1Byte(1個(gè)字節(jié)),一個(gè)字節(jié),是由八位的二進(jìn)制數(shù)構(gòu)成的。一位二進(jìn)制,我們稱為比特(bit),這才是計(jì)算機(jī)里的最小單位,1bit,只能表示0或1,再也找不到比這個(gè)更小的單位了。由上面的關(guān)系,我們可以得出
1 B = 8 bit
如果我們?cè)偕约由钊胙芯恳幌拢?B,是由8位二進(jìn)制數(shù)表示,那么它的范圍我們是可以求的。那么它的范圍是多少呢?

稍加思索,我們可以得到,最小值應(yīng)該是八個(gè)都填0,即00000000,換成十進(jìn)制是0;最大值應(yīng)該是八個(gè)都填1,即11111111,換成十進(jìn)制是255。因此1B的范圍,其實(shí)是0~255,總共有256種可能,也就是2^8。稍加推理,如果有n位,即有2^n種可能。
二、原碼
前面我們提到8位的二進(jìn)制的范圍是0~255,總共256種情況,但是計(jì)算機(jī)里面,很少這樣表示。那么計(jì)算機(jī)是如何表示的呢?計(jì)算機(jī)考慮到正負(fù)數(shù)的情況,因此往往會(huì)將最高位(左邊第一位)設(shè)置為符號(hào)位,如果是0表示是正,1表示是負(fù)。如果是8位,除去最高位表示符號(hào),其實(shí)只剩下7位用來表示數(shù)字的范圍,并且這7位表示的數(shù)字是該數(shù)的絕對(duì)值,我們也叫它真值。這樣的表示方式,我們成為原碼。

用前面的方式,我們可以得出,7位數(shù)的范圍是0~127,結(jié)合符號(hào)位,那么8位的原碼可以表示的范圍是-127~+127,其中因?yàn)橛辛?0與-0,所以表示范圍只有255種。原碼的優(yōu)缺點(diǎn)都很明顯,優(yōu)點(diǎn)是一目了然,缺點(diǎn)是是重復(fù)的0。其實(shí)還有一個(gè)缺點(diǎn)是計(jì)算不方便,譬如正負(fù)數(shù)相加時(shí)會(huì)比較復(fù)雜。
三、反碼
反碼很少用來表示數(shù),它更多時(shí)候是充當(dāng)連接原碼與補(bǔ)碼的橋梁。反碼很好理解,同樣的是最高位表示符號(hào),剩下的位數(shù)表示數(shù)值。但是它與原碼不同的是,正數(shù)的反碼與原碼一致,但是負(fù)數(shù),除了符號(hào)位保持不變,依舊是1外,數(shù)值位,全部需要反轉(zhuǎn)過來,1變0,0變1,因此我們稱它反碼。下面我們舉例說明:
原碼 00001010 ? ? 表示的是+10,它的反碼就是它本身,00001010
原碼 10001010 ? ? 表示的是 -10,它的反碼是符號(hào)位不變,數(shù)值位反轉(zhuǎn),即 11110101
四、補(bǔ)碼
其實(shí)在計(jì)算機(jī)中很少用原碼表示,基本上都是用補(bǔ)碼來表示和計(jì)算的,這是因?yàn)檠a(bǔ)碼更有利于計(jì)算,補(bǔ)碼可以直接帶上符號(hào)進(jìn)行計(jì)算。在原碼和反碼中,符號(hào)位是不能計(jì)算的,譬如正負(fù)數(shù)相加,需要比較它們的絕對(duì)值才能得出符號(hào)的正負(fù),但是在補(bǔ)碼中,符號(hào)位是可以直接計(jì)算的,最終的結(jié)果可以直接表示正負(fù),因此補(bǔ)碼比原碼和反碼更方面計(jì)算。有興趣的同學(xué)可以繼續(xù)探究,這里不展開。
不論是原碼、反碼、補(bǔ)碼,它們的最高位都是符號(hào)位,剩下的位都是數(shù)值位,并且正數(shù),原碼、反碼、補(bǔ)碼都是一樣的,即正數(shù)“三碼合一”。比較復(fù)雜的是負(fù)數(shù),負(fù)數(shù)的補(bǔ)碼,是在它的補(bǔ)碼的基礎(chǔ)上,在末尾加1。下面我們距離說明。

從上面,我們也可以得出,不論是+0,還是-0,補(bǔ)碼都是唯一,均為00000000,這也是為什么用補(bǔ)碼,而不用原碼計(jì)算的原因之一。
五、練習(xí)
1、【2009提高組(單選)】在字長為16位的系統(tǒng)環(huán)境下,一個(gè)16位帶符號(hào)整數(shù)的二進(jìn)制補(bǔ)碼為1111111111101101。其對(duì)應(yīng)的十進(jìn)制整數(shù)應(yīng)該是( ? )。
A.19 ? ? ? ? ? ? B.-19 ? ? ? ? ? ? ? ?C.18 ? ? ? ? ? ? ? ?D.-18
2、【2010普及】一個(gè)字長為8位的整數(shù)的補(bǔ)碼是11111001,則它的原碼是( ? )。
A.00000111 ? ? ? ? ? ?B.01111001 ? ? ? ? ? C.11111001 ? ? ? ? ? ? D.10000111
3、【2010提高組(多選)】在整數(shù)的補(bǔ)碼表示法中,以下說法正確的是( ? ? )。
A.只有負(fù)整數(shù)的編碼最高位為1
B.在編碼的位數(shù)確定后,所能表示的最小整數(shù)和最大整數(shù)的絕對(duì)值相同
C.整數(shù)0只有一個(gè)唯一的編碼
D.兩個(gè)用補(bǔ)碼表示的數(shù)相加時(shí),如果在最高位產(chǎn)生進(jìn)位,則表示運(yùn)算溢出
練習(xí)
1、無符號(hào)二進(jìn)制數(shù)11001000所表示的十進(jìn)制數(shù)為___________。
A .104 ? ? ? ? ? ?B. 148 ? ? ? ? ? ?C. 172 ? ? ? ? ? ? ? ?D . 200
2、有符號(hào)二進(jìn)制數(shù)11001000所表示的十進(jìn)制數(shù)為___________。
A . -200 ? ? ? ? ? ? B. -72 ? ? ? ? ? ? ?C. 72 ? ? ? ? ? ? ?D . 200
3、用16位和8位機(jī)器碼分別寫出十進(jìn)制數(shù)+58和-58的原碼、反碼和補(bǔ)碼。
4、若用8位機(jī)器碼表示十進(jìn)制數(shù)-101,則原碼表示的形式為( ? ?);
A.11100101 ? ? ? ? ?B.10011011 ? ? ? ? ? ?C.11010101 ? ? ? ? ? ?D.11100111
補(bǔ)碼表示的形式為( ? ?)。
A.11100101 ? ? ? ? ? B.10011011 ? ? ? ? ? ? C.11010101 ? ? ? ? ? D.11100111
5、已知一個(gè)字長為8的整數(shù)的原碼是10011010,求它的補(bǔ)碼。
6、已知一個(gè)字長為8的整數(shù)的補(bǔ)碼是10011000,求它的原碼。
答案:
真題:1、B ? ? ? ? ? ?2、 A ? ? ? ? ? ? 3、AC
練習(xí): 1、D ? ? ? ? 2、B
3、(1)+58 ? 16位原碼:0000 0000 0011 1010 ? ? 反碼:0000 0000 0011 1010
? ? ? ? ? ? ? ? ? ? 補(bǔ)碼:0000 0000 0011 1010
? ? ? ? ? ? ? ?8位原碼:0011 1010 ? ? ? ?反碼:0011 1010 ? ? ? ? ? ? 補(bǔ)碼:0011 1010
? ? ? (2)-58 ? ? ?16位原碼:1000 0000 0011 1010 ? ? ?反碼:1111 1111 1100 0101
? ? ? ? ? ? ? ? ? ? ? 補(bǔ)碼:1111 1111 1100 0110
? ? ? ? ? ? ? 8位原碼:1011 1010 ? ? ? ? ? ?反碼:1100 0101 ? ? ? ? ?補(bǔ)碼:1100 0110
4、(1)A ?(2) B
5、1110 0110
6、1110 1000