計算機中只有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++)
;//不是無限循環的函數