一、位和字節(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ù)表示,那么它的范圍我們是可以求的。那么它的范圍是多少呢?
稍加思索,我們可以得到,最小值應(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