數在計算機中是以二進制形式表示的,分為有符號數和無符號數。
原碼、反碼、補碼都是有符號定點數的表示方法。
一個有符號定點數的最高位為符號位,0是正,1是副。
1.原碼就是這個數本身的二進制形式。
例如:0000001 就是+1 1000001 就是-1
2.正數的反碼和補碼都是和原碼相同。
負數的反碼是將其原碼除符號位之外的各位求反。
[-3]反=[10000011]反=11111100
負數的補碼是將其原碼除符號位之外的各位求反之后在末位再加1。
[-3]補=[10000011]補=11111101
一個數和它的補碼是可逆的。
3.設立補碼的原因有兩個:
第一是為了能讓計算機執行減法:[a-b]補=a補+ (-b)補
第二個原因是為了統正0和負0正零: 00000000 負零: 10000000
這兩個數其實都是0,他們的原碼卻有不同的表示,但是他們的補碼是樣的, 都是0000000
那么,000000這個補碼表示的哪個數的補到呢?
其實這是一個規定,這個數表示的是-128 所以n位補碼能表示的范圍是 -2^(n-1)到2^(n-1)-1 比n位原碼能表示的數多一個.
4.總結:
在計算機內,定點數有3種表示法:原碼、反碼和補碼
所謂原碼就是前面所介紹的二進制定點表示法,即最高位為符號位,“0” 表示正,“1” 表示負,其余位表示數值的大小。
反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
補碼表示法規定:正數的補碼與其原碼相同:負數的補碼是在其反碼的求位加1。