- 大學計算機基礎(第二版)
- 何元清 付茂洺
- 2902字
- 2019-09-30 12:12:45
1.2.3 計算機中數值的表示
通過前面的學習已經知道,計算機內部采用二進制表示數據。對于數值型數據,數據有正負和小數之分,因此必須解決有符號數、小數在計算機內部的表示。
1.有符號數與無符號數
由于計算機中只能存儲0和1,所以數的符號也必須用0和1來表示。
現在假設一個數據用8位二進制表示,在表示無符號數據時,8位都用于表示數據,因此可表示的數據的范圍是0~255(00000000~11111111)。
當表示有符號數時,需要占用一個二進制位來表示符號。約定二進制數的最高位(左邊第一位)作為符號位,用“0”表示正數,“1”表示負數,這樣,數的正負號就被數值化了。假設一個數據用8位二進制表示,此時可表示的數據的范圍是-128~127(10000000~01111111)。例如:

表示數據+52。再如:

表示數據-52。
2.真值與機器數
通常,把數值在計算機中的二進制表示形式稱為“機器數”,對于有符號數,因為最高位是符號位,數的形式值就不等于真正的數值,把帶符號位的機器數對應的數值稱為機器數的“真值”。例如,假設一個數據用8位二進制表示,則對于十進制數+105,由于其對應的二進制數是1101001,因此+105對應的機器數為01101001,而十進制數-105對應的機器數為11101001。
機器數有兩個特點:
①機器數的位數固定,能表示的數值范圍受到位數限制。例如,字長為8位的計算機,能表示的無符號數的范圍是0~255,有符號數的范圍是-128~127。由于機器數受字長的限制,因此當計算機運算結果超過機器數所能表示的范圍時,就會產生“溢出”。
②用“0”表示正數,“1”表示負數,因此,機器數是連同數據符號一起數字化了的數據。
3.小數
在計算機中小數的表示有兩種形式:定點表示法和浮點表示法。其中,定點表示法如圖1-5所示。

圖1-5 定點表示法
定點表示法是將小數點的位置固定在一個二進制數的某一位置。通常是將其固定在數的最前面,將數據表示為一個純小數;或固定在數的最后面,將數據表示為一個純整數。但在存儲器件上并不存儲小數點,只是隱含規定它就在此位置。
例如,將小數點固定在最前面:

表示數據+0.40625。再如,將小數點固定在最后面:

表示數據-52。
上述的定點小數表示法,只能表示純小數或純整數,而實際使用的數大部分是混小數,即小數點的前面和后面都有數據,因此用浮點數來表示這樣的小數。
由于篇幅所限,本書不再詳細介紹浮點表示法,其相關知識可以參考其他相關教材
4.定點數和浮點數
根據小數點位置固定與否,機器數又可以分為定點數和浮點數。通常,使用定點數表示整數,而用浮點數表示實數。
(1)整數
整數沒有小數部分,小數點固定在數的最右邊。整數可以分為無符號整數和有符號整數兩類。無符號整數的所有二進制位全部用來表示數值的大小;有符號整數用最高位表示數的正負號,而其他位表示數值的大小。例如,假設數據用8位二進制表示,則十進制整數-65的計算機內部表示形式是11000001。
(2)浮點數
浮點表示法表示的數據,其小數點的位置是浮動的。其思想來源于十進制中的科學記數法。在科學記數法中,任何一個數都可以表示為指數形式,如762.39可以寫成0.76239×103,而且可以通過改變指數,使小數點的位置發生移動,如寫成76239×10-2。十進制中的科學計數法的一般形式為:N=D×10n,其中D為純小數,n為整數。在二進制中,一個數也可以寫成這種形式:P=S×2E,其中S稱為尾數,E稱為階碼。
①階碼:用于表示小數點在該數中的位置,它是一個帶符號的整數。
②尾數:用于表示數的有效數值,可以采用整數或純小數兩種形式。
一般PC選擇32位(單精度)或64位(雙精度)二進制表示一個浮點數。32位浮點數格式如下:

例如,一個十進制數-34500,在機器中,它的二進制數為-1000011011000100,規格化為:-0.1000011011000100×200100000,如果使用浮點數表示,則為

5.原碼、反碼和補碼
計算機中數的符號被數值化后,為了便于對機器數進行算術運算,提高運算速度,又設計了符號數的各種編碼方案,主要有原碼、反碼和補碼3種。
(1)原碼
一個正數的原碼和它的真值相同,負數的原碼為這個數真值的絕對值,符號位為1。假設計算機中用8位二進制表示一個數據,最高位被設置為符號位,后面的7位表示真值。數X的原碼記為[X]原。0的原碼有兩種表示形式:
[+0]原=00000000
[-0]原=10000000
例如,求十進制數+67和-67的原碼。
因為 (67)10=(1000011)2
所以 [+67]原=01000011
[-67]原=11000011
原碼表示的數的范圍與二進制數的位數(即機器字長)有關。如果用8位二進制數表示時,最高位為符號位,整數原碼表示的范圍為-128~+127,即最大數是01111111,最小數是11111111。同理,用16位二進制數表示整數原碼的范圍是-32768~+32767。
原碼的優點是簡單、直觀,用原碼進行乘法運算比較方便:尾數相乘,符號位單獨運算(不考慮符號位產生的進位,只要將兩個參加運算的數做簡單的加法就得到它們乘積的符號)。顯然,如果用原碼進行加法運算就會遇到符號運算需要進行多次判斷的麻煩:先要判斷符號位是否同號,決定是進行加法或減法;對不同號的情況,還要判斷哪個數的尾數大,才能決定最后運算結果的符號。為了簡化原碼加減法運算的復雜性,計算機中引入了反碼和補碼。
(2)反碼
一個正數的反碼等于它的原碼;一個負數的反碼,最高位(符號位)為1,其余各位按位求反。數X的反碼記為[X]反。
例如,假設用8位二進制表示一個數據,則+1010010的反碼為01010010,-1010010的反碼為10101101。
零的反碼有兩種表示,即
[+0]反=00000000
[-0]反=11111111
一個數如果不考慮它的符號,按照取“反”的原則求它的反碼,并與這個數的原數相加,其結果為所有位都是1。例如,1010010的反碼為0101101,將它們相加:
1010010+0101101=1111111
這是反碼的一個重要特性,也稱做“互補”。通常反碼作為求補碼過程的中間形式。
(3)補碼
一個正數的補碼等于它的原碼;一個負數的補碼,最高位(符號位)為1,其余各位按位求反,最末位加1,即“求反加1”。數X的補碼記為[X]補。
例如,+1010010的補碼為01010010;-1010010的反碼為10101101,它的補碼為反碼加1,即10101101+1=10101110。
零的補碼表示是唯一的,即
[+0]補=00000000
[-0]補=00000000
補碼表示的數的范圍也與二進制數的位數(即機器字長)有關。如果用8位二進制數表示時,最高位為符號位,整數補碼表示的范圍為-128~+127。用16位二進制數表示整數補碼的范圍是-32768~+32767。
又如,假設用8位二進制表示一個數據,求十進制數+67和-67的補碼。因為(67)10=(1000011)2所以[+67]補=01000011[-67]補=10111101
6.數據存儲單位
(1)位
“位”(bit)是電子計算機中最小的數據單位。每一位的狀態只能是0或1。
(2)字節
8個二進制位構成1個“字節”(byte,單位符號為B),它是存儲空間的基本計量單位。1B可以存儲1個英文字母或者半個漢字,換句話說,1個漢字占據2B的存儲空間。
(3)字(word)
“字”由若干個字節構成,字的位數稱做字長,不同檔次的計算機有不同的字長。例如,一臺8位機,它的1個字就等于1B,字長為8位。如果是一臺16位機,那么,它的1個字就由2B構成,字長為16位。字是計算機進行數據處理和運算的單位,是衡量計算機性能的一個重要指標,字長越長,性能越強。
(4)KB(千字節)
在一般的計量單位中,小寫k表示1000。例如,1千米=1000米,經常被寫為1km;1千克=1000克,寫為1kg。同樣,大寫K在二進制中也有類似的含義,只是這時K表示210=1024,即1KB表示1024B。
(5)MB(兆字節)
計量單位中的M(兆)是106,見到M自然想起要在該數值的后邊續上6個0,即擴大100萬倍。在二進制中,MB也表示百萬級的數量級,但1MB不是正好等于1000000字節,而是1048576字節,即1MB=220B=1048576B。
計算機系統在數據存儲容量計算中,有如下數據計量單位:
1B=8bit
1KB=210B=1024B
1MB=220B=1048576B
1GB=230B=1073741824B
1TB=240B=1099511627776B