205.碼制

1.定義

      計算機中的數是用二進制來表示。數的符號也是用二進制表示的。在機器中,把一個數連同其符號在內數值化表示的數成爲機器數。機器數能夠用不一樣的碼制來表示,經常使用的有原碼、補碼、反碼錶示法。通常用最高有效位表示數的符號,正數用0表示,負數用1表示。post

     原碼由真值得來,真值(人理解的數 +3 -3 +1.5 -1.5)是一個變量自己所具備的真實值,是一個理想概念,通常沒法獲得。spa

 

2.原碼

 2.1真值化原碼

整數 +5D -5D
1 取絕對值 [+5]真值→|+5|=5 [-5]真值→|-5|=5
2 化二進制 (5)10=(0101)2=0101B (5)10=(0101)2=0101B
3 加正負號(此時位機器真值) 0101B加符號 → +0101B機器真值 0101B加符號 → -0101B機器真值

4 標準化blog

(符號位正爲0負爲1,尾數外中間補0)get

+0101B=0 000 0101B -0101B=1 000 0101B
[+5]原碼=0 000 0101B [-5]原碼=1 000 0101B

 

純小數 +0.8125D -0.8125D
1 取絕對值 |+0.8125|=0.8125 |-0.8125|=0.8125
2 化二進制 (0.8125)10=(0.1101)2=0.1101B (0.8125)10=(0.1101)2=0.1101B
3 加正負號 0.1101B加符號 → +0.1101 0.1101B加符號 → -0.1101B機器真值

4 標準化it

(符號位正爲0負爲1,右補足8位)io

+0.1101B=0.1101 000B -0.1101B=1.1101 000B
[+0.8125]原碼=0.1101 000B [-0.8125]原碼=1.1101 000B

 純小數表示範圍爲(-1,1),因此8位0.1101 000B存儲爲0110 1000,並不會和0110 1000表示的整數衝突table

 

3.反碼

 正數 原碼、反碼、補碼 同樣基礎

 負數 反碼在原碼基礎上,符號位不變,其餘位按位取反變量

[+5]=[+5]=[+5]=0 000 0101B
[-5]=   1 000 0101 B

[-5]=[-5]+1=111 1011B擴展

                    末位加一

符號位不變↓其他按位取反
[-5]=   1 111 1010 B
 [+0.8125]=[+0.8125]=[+0.8125]=0.1101 000 B
 [-0.8125]=1.1101 000

[-0.8125]=[-0.8125]+0.000 0001

=1.001 0111+0.000 0001=1.001 1000

      符號位不變↓其他按位取反
 [-0.8125]=1.0010 111

4.補碼

4.1定義

補碼錶示法中,

正數採用 符號-絕對值 表示,即數的最高有效位爲0表示正,數的其他部分則表示數的絕對值

機器字長8位:

[+1] = 0 000 0001

[+127] = 0 111 111

[+0] = 0000 0000

補碼錶示負數,n位機器字長表示負數X爲 2n-|X|

機器字長8位:

[-1] = 28-1 = 1 111 1111

[-127] = 28-127 = 1 000 0001

[-0] = 28-0 = 0000 0000

注意

補碼錶示法中0只有一種表示即 0000 0000

對於1000 0000,在補碼錶示法中被定義爲  -128

8位 原碼 反碼 補碼
+0 0000 0000 0000 0000    0000 0000
-0 1000 0000 1111 1111 1 0000 0000 cf=1
範圍 -127D˜127D -127D˜127D -128D˜127D

8位能夠表示28個不一樣的數,+0和-0補碼都是0000 0000,空一個表示-128

 

4.2轉化

正數

  原碼、反碼、補碼 同樣

負數

  法一:補碼在反碼基礎上,末位加一 

[+5]=[+5]=[+5]=0 000 0101B
[-5]=   1 000 0101 B

[-5]=[-5]+1=111 1011B

                    末位加一

符號位不變↓↓其他按位取反
[-5]=   1 111 1010 B
 [+0.8125]=[+0.8125]=[+0.8125]=0.1101 000 B
 [-0.8125]=1.1101 000

[-0.8125]=[-0.8125]+0.000 0001

=1.001 0111+0.000 0001=1.001 1000

      符號位不變↓↓其他按位取反
 [-0.8125]=1.0010 111

  法二:對於一個正數的補碼錶示  按位求反後再在末位加一  能夠獲得與此正數相對於的負數的補碼錶示

  機器字長爲8位 機器字長爲16爲
  -46D的補碼 -117D的補碼

1  先寫出與該數相對應的

正數的補碼錶示(符號-絕對值法)

+46D的補碼錶示爲

0010 1110

+117D的補碼錶示爲

0000 0000 0111 0101

2  將其按位取反 1101 0001 1111 1111 1000 1010
3  在末位(最低位)加一 1101 0010 1111 1111 1000 1011
4  用十六進制表示 D       2 F       F       8      B
5  結果 [-46] = D2H [-117] = FF8BH

 

4.3計算

4.3.1求補運算

定義

對於一個二進制數→按位求反→在末位加一  的運算稱爲求補運算

 

推理

補碼錶示的數具備如下特性:

  [X]   求補得› [-X]  求補得›  [X]

  [117]=0075H [-117]=FF8BH

對[-117]

做求補運算

[-117] 1111 1111 1000 1011
按位求反後得 0000 0000 0111 0100
末位加一後得 0000 0000 0111 0101
  [-117] 0000 0000 0111 0101

4.3.2加減運算

補碼的加法規則:

  [X+Y] = [X] + [Y]

補碼的減法規則:

  [X-Y] = [X] + [-Y]

其中[-Y] 只要對[Y]求補就可獲得

  [Y]補  → 因此位按位取反 → 末位加一 → [-Y] 

十進制 二進制
  +25   0001 1001
+ +32 + 0010 0000
= 57 = 0011 1001
       
  +32   0010 0000
+ -25 + 1110 0111
= 7 = 0000 0111
      ↓1
       
  -25   1110 0111
+ -32 + 1110 0000
= -57 = 1100 0111
      ↓1
       
  25   0001 1001
+ -32 + 1110 0000
= -7 = 1111 1001

 

十進制 二進制
  25   0001 1001   0001 1001
- 32 - 0010 0000 + 1110 0000
= -7 對減數求補換成加法 = 1111 1001
           
  -25   1110 0111   1110 0111
- -32 - 1110 0000 + 0010 0000
= 7 對減數求補換成加法 = 0000 0111
          ↓1

 

5.符號擴展

符號擴展是指一個數從位數較少擴展到位數較多(如從8爲擴展到16位,或從16位擴展到32位)

補碼錶示數的符號擴展,對於補碼錶示的數,正數的符號擴展應該在前面補0,而負數擴展則應該在前面補1

機器字長爲8位 [+46]=                 0010 1110 [-46]=                 1101 0010
擴展到16位 [+46]= 0000 0000 0010 1110 [-46]= 1111 1111 1101 0010

 

6.數的表示範圍

6.1n位補碼

通常來講n位補碼錶示的數的表示範圍是 -2n-1 ≤ N ≤ 2n-1-1

8位二進制數能夠表示28=256個數,當他們是補碼錶示帶符號數時,他們表數範圍爲-128 ≤ N ≤ +127

n=16時的表數範圍是-32768 ≤ N ≤ +32767

 

爲了擴大表數範圍,在機器裏,能夠用二個機器字(低位字和高位字)來表示一個機器數,這種數稱爲雙字長數或雙精度數,其中高位字的最高有效位爲符號位。

機器字長爲16位爲例,高位字的低15位和整個低位字的16位聯合組成31位數來表示數值,於是低位字的最高有效位沒有符號意義只有數值意義,雙字長數的表數範圍可擴大到 -231 ≤ N ≤ 231-1

15 14              0 15                   0
符號 高位字 低位字
  補碼值

 

 

 

相關文章
相關標籤/搜索