小結整數分為無符號數和有符號數。整數在計算機上的運算是模運算,形成的數學結構稱為阿貝爾群,阿貝爾群具有以下特點:
①滿足運算的交換律和結合律公理
②整數具有單位元——0
③整數具有逆元
由於模運算導致阿貝爾群產生,從而導致了整數與浮點數在運算性質上的極大不同。整數支援加法和乘法的交換律、結合律;而浮點數因為精度的限制,沒有交換律和結合律,因此浮點的運算要格外的小心。
圖1下面理解模運算。考慮圖1的迴圈佇列,在入隊時隊尾指標rear=(rear+1)%maxsize,例如入隊前rear指向索引4,那麼入隊乙個新元素後rear=5%5=0。設想如果沒有這樣模運算rear就將等於5,而5是迴圈佇列中不存在的「溢位數」,規避溢位數的做法就是模運算。在整數結構裡,和迴圈佇列對應,整數同樣有maxsize,整數間的運算或是求逆元都可能造成類似迴圈佇列中規避溢位數的現象,因此整數操作採用了同樣的模運算。
例如,32bit的資料型別int定義下的算式:
500*400*300*200
>>> -884901888
這個結果很反常,但其本質是模運算規避溢位數的結果。值得注意,對於程式本身,乙個數達到了maxsize,程式就會自認「合理」地採用迴圈佇列的模運算,再從資料大小的起點開始重新計數,這樣計算的值就不會超出maxsize;但是對於操作者而言,即使計算的數確實仍然在該資料型別對應的範圍內,但結果已經失去了意義,這種情況下,我們依舊認為出現了溢位(overflow)。由於程式層面上可以編譯通過,所以一般不會造成系統報錯;但操作者卻要格外小心這類不報錯的致命錯誤。具體的細節和原因接下來闡述。
給出無符號數和有符號數的定義,假設乙個w
ww位位向量x
⃗x ⃗
x⃗=[x (w
−1)x_
x(w−1)
,x(w−
2)x_x(
w−2)
,……x
0x_0
x0],則
b 2u
w(x⃗
)=∑i
=0w−
12ix
ib2u_w (x ⃗ ) = \sum_^x_i
b2uw(
x⃗)=
i=0∑
w−1
2ixi
即二進位制轉無符號數,其位權均為正。無符號數是二進位制的十進位制數
b 2t
w(x⃗
)=−x
w−12
i+∑i
=0w−
22ix
ib2t_w (x ⃗ ) =-x_2^i+ \sum_^x_i
b2tw(
x⃗)=
−xw−
12i
+i=0
∑w−2
2ix
i即二進位制轉有符號數,其位權首位為負,其餘為正。有符號數是二進位制補碼的十進位制數
可以證明上述的位向量和有符號數、無符號數是一一對應的。乙個位向量必由乙個無(有)符號數對應,乙個無(有)符號數也只對應乙個位向量。要注意的是無符號數對應的位向量是二進位制數(首位不是符號位),有符號數對應的是二進位制補碼。
由定義可以直接匯出有符號數和無符號數的數值範圍
圖2 整數的運算的本質都是基於這個資料範圍進行模運算。從前面知道,模運算導致了阿貝爾群,阿貝爾群的特點是具有逆元。整數的單位元為0,因此整數x加它的逆元應該要等於0
考慮的是x加多少可以為0,而不是把逆元當作負號對待。如圖3(i),從x
xx到uma
x=2w
−1u_=2^w-1
umax=
2w−1
要加2 w−
1−x2^w-1-x
2w−1−x
,此時若再加1,由迴圈佇列的模運算就相當於為0,於是無符號數的加法逆元為:
− x=
&0, &x=0\\ &2^w-x& x≠0\\ \end \right.
−x=-1
2w−1−1
都有唯一的對稱負元素與之對應,因此對於x≠t
minx≠t_
x=tm
in的情況可以認為逆元就是x的相反數,也就是數學上的意義;對於x=t
minx=t_
x=tmin
的情況由於沒有對稱元素就要借助最基本的模運算,tmi
nt_tmin
從正負兩個方向看與0的距離都是∣tm
in∣|t_|
∣tmin
∣,又考慮到w位的有符號數tma
x=2w
−1−1
t_=2^-1
tmax=
2w−1
−1,因此不能從正方向加上2w−
12^2w−1
這個數,因此採取的方式就是從負方向上減去乙個∣tm
in∣|t_|
∣tmin
∣於是有符號數的加法逆元為:
− x=
&-x, &x≠t_\\ &t_& x=t_\\ \end \right.
−x={−
x,tm
in
x=
tmin
x=t
min
計算機系統 浮點數
浮點數 1.二進位制小數 二進位制小數點右側的 位 表示2的分數冪次 負冪 竅門 小數部分寫成分數,分母為2 k,k為小數字,分子為小數部分二進位制的值。即 101 5 8 0.625 表示範圍 只能精確表示諸如x 2 k的數 其它的值只能近似表示 2.ieee浮點數 數字形式 符號位s 確定了這個...
計算機系統中的浮點數
人類世界的小數的表示形式 1 我們最習慣的小數表示形式是十進位制,形式為 它的值為 2 小數的二進位制表示法,形式為 它的值為 ieee浮點標準 在計算機系統中,因為有位元組的限制 c語言中float型別佔4位元組,double型別佔8位元組 小數的表示要複雜的多。ieee制定的浮點標準得到了所有的...
計算機系統第二章 浮點數
二進位制小數 底權公式 1011.101 8 2 1 0.5 0.125 11.625 竅門 小數部分寫成分數,分母為2 k,k為小數字數,分子為小數部分二進位制的值,即101 5 8 0.625 觀察 小數點右移一位 乘2 小數點左移一位 除2 二進位制小數表示範圍 只能精確表示諸如x 2 k的數...