數(shù)值數(shù)據(jù)分為有符號數(shù)和無符號數(shù)。無符號數(shù)最高位表示數(shù)值,而有符號數(shù)最高位表示符號。有符號數(shù)有不同的編碼方式,常用的是補碼。
(1)原碼:
最高位表示符號(正數(shù)用 0, 負數(shù)用 1 ),其它位為該數(shù)的二進制數(shù)值,稱為有符號數(shù)的原碼表示。
① 小數(shù)原碼的定義
[x] 原 =
x
0≤x < 1
1 - x
- 1 < x ≤ 0
例如: x=+0.1011 , [x] 原 = 0.1011
x= - 0.1011 [x] 原 = 1.1011
② 整數(shù)原碼的定義
[x] 原 =
x
0≤x <
- x
- < x ≤ 0
【例】
x=45d=00101101b [x] 原 = 00101101b
x=-45d [x] 原 =10101101b
原碼表示簡單易懂,但若是兩個異號數(shù)相加(或兩個同號數(shù)相減) , 就要做減法。為了把減法運算轉(zhuǎn)換為加法運算就引進了反碼和補碼。
(2)反碼:
正數(shù)的反碼與原碼相同,符號位用 0 表示,數(shù)值位不變。負數(shù)的反碼符號位用 1 表示 , 數(shù)值位為原碼數(shù)值位按位取反形成,即 0 變 1 、 1 變 0 。
① 小數(shù)反碼的定義
[x] 反 =
x
0≤x < 1
2 - - x
- 1 < x ≤ 0
例如: x=+0.1011 [x] 反 = 0.1011
x= - 0.1011 [x] 反 = 1.0100
② 整數(shù)反碼的定義
[x] 反 =
x
0≤x <
- 1 - x
- < x ≤ 0
【例】 x=45d=00101101b, [x] 反 =00101101b
x=-45d [x] 反 =11010010b
( 3 )補碼:
正數(shù)的補碼與原碼相同,即符號位用 0 表示,數(shù)值位不變。負數(shù)的補碼為反碼加 1 形成。
① 小數(shù)補碼的定義
[x] 補 =
x
0≤x < 1
2 + x
- 1 ≤ x < 0
例如: x=+0.1011, [x] 補 = 0.1011
x= - 0.1011, [x] 補 = 1.0101
② 整數(shù)補碼的定義
[x] 補 =
x
0≤x <
+ x
- ≤ x < 0
【例】 x=45d=00101101b [x] 補 =00101101b
x=-45 d [x] 補 =11010011b
(4)符號擴展:
在數(shù)據(jù)處理時,有時需要把 8 位二進制數(shù)擴展成 16 位二進制數(shù)。
當(dāng)要擴展的數(shù)是無符號數(shù)時,可在最高位前擴展 8 個 0 。
如果要擴展的數(shù)是補碼形式的有符號數(shù),那么就要進行符號位的擴展。符號擴展后,其結(jié)果仍是該數(shù)的補碼。
(5)數(shù)據(jù)的表示范圍和大小
n 位二進制數(shù)能表示的無符號整數(shù)的范圍是 :
0 ≤ i ≤ ;
n 位二進制數(shù)能表示的有符號整數(shù)的范圍是 :
- ≤ i ≤ +-1
(6)補碼的加法和減法
1 、運算規(guī)則
[x + y] 補 = [x] 補 + [y] 補
[x - y] 補 = [x] 補 + [ - y] 補
若已知 [y] 補 ,求 [ - y] 補 的方法是:將 [y] 補 的各位(包括符號位)逐位取反再在最低位加 1 即可。
例如: [y] 補 = 101101 [ - y] 補 = 010011
2 、溢出判斷,一般用雙符號位進行判斷:
符號位 00 表示正數(shù) 11 表示負數(shù)
結(jié)果的符號位為 01 時,稱為上溢;為 10 時,稱為下溢
例題:設(shè) x=0.1101 , y= - 0.0111 ,符號位為雙符號位
用補碼求 x+y , x - y
[x] 補 +[y] 補 =00 1101+11 1001=00 0110
[x - y] 補 =[x] 補 +[ - y] 補 =00 1101+00 0111=01 0100
結(jié)果錯誤,正溢出
補碼的特性: [[ x ] 補]補 ==> [- x ] 補
[[-x]補]補 ==> [ x ] 補
補碼的加法規(guī)則: [ x+y ] 補 =[ x ] 補+ [ y ] 補
補碼的減法規(guī)則: [ x - y ] 補 =[ x ] 補+ [- y ] 補