&nb

計算機中只有0和1,在這種條件約束下,只能表達正整數和0;ide

字長:計算機cpu的性能指標,指cpu一次能夠加工,處理的二進制位數。函數

定長:計算機在表示信息的時候,採用固定的二進制位數,這個二進制位數叫作定長。性能

在n位定長的約束下,計算機表示的數值範圍爲[0,2^n)it

在n位定長下,存在如下的等式class

            2^n = 0
基礎

原碼:循環

爲了可以表示負數,引入原碼二進制

原碼在N位定長的基礎上,引入最高位表示正負,其中1表示負,0表示正數。總結

n位原碼的取值範圍爲(-2^(n-1),2^(n-1))cpu

當n爲8時,爲[-127,+127]

計算機中沒有原碼

補碼:

在計算機中存在兩大運算:邏輯運算和算術運算

邏輯運算:或,與,非,異或

A     B     A&&B   A||B    A^B  

0     1      0       1     1

1     1       1       1     0

1     0      0        1     1

1     1       1       1      0

算術運算:

A  B   A+B

0  1   01

1   1  10

1   0  01

0   1   01

總結:進位等於A&&B

        本位等於A^B

因爲減法電路中存在借位,沒法用簡單的電路實現,因此引入補碼

補碼的定義:

      如表示正數,則原碼等於補碼  

      如表示負數,則在原碼的基礎上,除符號位外,各位取反而後末位加1

在定長爲8的時,-8的原碼:

    1000 1000 

因此根據定義其補碼爲:

    1111 1000

(x + y)的補碼 = x的補碼 + y的補碼

n位補碼錶示的範圍:[-2^(n-1),2^(n-1))

n位補碼比n位原碼多表示一位數的緣由:

在原碼錶示0的時候 0000 0000表示0 1000 0000表示0,

上述兩個原碼對應同一個補碼,因此原碼比補碼少一個數

補碼存在一個問題 

        以8位定長來講,它的補碼範圍[-127,127)

        127+1 == -127

        如上式,補碼的大小有範圍且相互鏈接

        int i;

        for(i = 1; i > 0; i++)

            ;//不是無限循環的函數

相關文章
相關標籤/搜索