一挂疆、位和字節(jié)(bit && Byte)
我們都知道計算機上所有的數(shù)據(jù)和運算都是基于二進制進行的,那么講到數(shù)據(jù)的存儲的時候下翎,我們總是會涉及到數(shù)據(jù)的大小的問題缤言,那么我們都是如何描述數(shù)據(jù)的大小的呢?目前我們最常見的單位是TB,GB,MB,KB等视事。譬如說一塊硬盤的存儲空間大小是1TB胆萧,一條內存的大小是4GB,一個文件的大小是8MB等等俐东。這些單位都是描述數(shù)據(jù)大小的跌穗,并且他們可以相互轉化。
1 PB = 1024 TB ? (1024 = 2^10)
1 TB = 1024 GB
1 GB = 1024 MB
1 MB = 1024 KB
1 KB = 1024 B
以上就是我們最常用的一些單位了虏辫,似乎1B 已經是最小的表示單位了蚌吸。等一下,1B真是的是最小的單位了嗎砌庄?
答案當然是否定的羹唠。其實在1B之下奕枢,還有更小的單位,1B的全稱是1Byte(1個字節(jié))肉迫,一個字節(jié)验辞,是由八位的二進制數(shù)構成的。一位二進制喊衫,我們稱為比特(bit)跌造,這才是計算機里的最小單位,1bit族购,只能表示0或1壳贪,再也找不到比這個更小的單位了。由上面的關系寝杖,我們可以得出
1 B = 8 bit
如果我們再稍加深入研究一下违施,1B,是由8位二進制數(shù)表示瑟幕,那么它的范圍我們是可以求的磕蒲。那么它的范圍是多少呢?
稍加思索只盹,我們可以得到辣往,最小值應該是八個都填0,即00000000殖卑,換成十進制是0站削;最大值應該是八個都填1,即11111111孵稽,換成十進制是255许起。因此1B的范圍,其實是0~255菩鲜,總共有256種可能园细,也就是2^8。稍加推理接校,如果有n位珊肃,即有2^n種可能。
二馅笙、原碼
前面我們提到8位的二進制的范圍是0~255伦乔,總共256種情況,但是計算機里面董习,很少這樣表示烈和。那么計算機是如何表示的呢?計算機考慮到正負數(shù)的情況皿淋,因此往往會將最高位(左邊第一位)設置為符號位招刹,如果是0表示是正恬试,1表示是負。如果是8位疯暑,除去最高位表示符號训柴,其實只剩下7位用來表示數(shù)字的范圍,并且這7位表示的數(shù)字是該數(shù)的絕對值妇拯,我們也叫它真值幻馁。這樣的表示方式,我們成為原碼越锈。
用前面的方式仗嗦,我們可以得出,7位數(shù)的范圍是0~127甘凭,結合符號位稀拐,那么8位的原碼可以表示的范圍是-127~+127,其中因為有了+0與-0丹弱,所以表示范圍只有255種德撬。原碼的優(yōu)缺點都很明顯,優(yōu)點是一目了然躲胳,缺點是是重復的0蜓洪。其實還有一個缺點是計算不方便,譬如正負數(shù)相加時會比較復雜泛鸟。
三蝠咆、反碼
反碼很少用來表示數(shù)踊东,它更多時候是充當連接原碼與補碼的橋梁北滥。反碼很好理解,同樣的是最高位表示符號闸翅,剩下的位數(shù)表示數(shù)值再芋。但是它與原碼不同的是,正數(shù)的反碼與原碼一致坚冀,但是負數(shù)济赎,除了符號位保持不變,依舊是1外记某,數(shù)值位司训,全部需要反轉過來,1變0液南,0變1壳猜,因此我們稱它反碼。下面我們舉例說明:
原碼 00001010 ? ? 表示的是+10滑凉,它的反碼就是它本身统扳,00001010
原碼 10001010 ? ? 表示的是 -10喘帚,它的反碼是符號位不變,數(shù)值位反轉咒钟,即 11110101
四吹由、補碼
其實在計算機中很少用原碼表示,基本上都是用補碼來表示和計算的朱嘴,這是因為補碼更有利于計算倾鲫,補碼可以直接帶上符號進行計算。在原碼和反碼中腕够,符號位是不能計算的级乍,譬如正負數(shù)相加,需要比較它們的絕對值才能得出符號的正負帚湘,但是在補碼中玫荣,符號位是可以直接計算的,最終的結果可以直接表示正負大诸,因此補碼比原碼和反碼更方面計算捅厂。有興趣的同學可以繼續(xù)探究,這里不展開资柔。
不論是原碼焙贷、反碼、補碼贿堰,它們的最高位都是符號位辙芍,剩下的位都是數(shù)值位,并且正數(shù)羹与,原碼故硅、反碼、補碼都是一樣的纵搁,即正數(shù)“三碼合一”吃衅。比較復雜的是負數(shù),負數(shù)的補碼腾誉,是在它的補碼的基礎上徘层,在末尾加1。下面我們距離說明利职。
從上面猪贪,我們也可以得出跷敬,不論是+0,還是-0哮伟,補碼都是唯一干花,均為00000000妄帘,這也是為什么用補碼,而不用原碼計算的原因之一池凄。
五抡驼、練習
1、【2009提高組(單選)】在字長為16位的系統(tǒng)環(huán)境下肿仑,一個16位帶符號整數(shù)的二進制補碼為1111111111101101致盟。其對應的十進制整數(shù)應該是( ? )。
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.只有負整數(shù)的編碼最高位為1
B.在編碼的位數(shù)確定后责蝠,所能表示的最小整數(shù)和最大整數(shù)的絕對值相同
C.整數(shù)0只有一個唯一的編碼
D.兩個用補碼表示的數(shù)相加時党巾,如果在最高位產生進位,則表示運算溢出
練習
1霜医、無符號二進制數(shù)11001000所表示的十進制數(shù)為___________齿拂。
A .104 ? ? ? ? ? ?B. 148 ? ? ? ? ? ?C. 172 ? ? ? ? ? ? ? ?D . 200
2、有符號二進制數(shù)11001000所表示的十進制數(shù)為___________肴敛。
A . -200 ? ? ? ? ? ? B. -72 ? ? ? ? ? ? ?C. 72 ? ? ? ? ? ? ?D . 200
3署海、用16位和8位機器碼分別寫出十進制數(shù)+58和-58的原碼、反碼和補碼医男。
4砸狞、若用8位機器碼表示十進制數(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
練習: 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