計算機系統內的整數運算的侷限:
表示整數的二進位制位是一定的,所以表示的整數的範圍是侷限的。
「整數」運算實際上是一種模運算:
表示數字的有限字長限制了可能的取值範圍,結果運算可能溢位,所以運算結果都是取模之後的。
無符號加法
乙個算術運算溢位,是指完整的整數結果不能放到資料型別的字長限制中去。
c語言中真正執行的無符號加法:+u
w (用這種符號區別標準的加法; + 表示標準的加法),又稱為 模數加法。
整數加法和無符號加法間的關係。當x+y大於2w-1時,其和溢位。
例如:(231 = 2147483648)
unsigned int u1=2147483648u+2147483647u輸出:u1=4294967295; printf(
"u1=%u\n
",u1);
unsigned
int u2=2147483648u+2147483647u+1
; printf(
"u2=%u\n
",u2);
u2=0
補碼加法
在計算機計算中,通常將表示截斷到w位,來避免資料大小的不斷擴張。c語言中真正執行的補碼加法:+t
w(用這種符號區別標準的加法)
整數和補碼加法之間的關係:
當x+y小於-2w-1
,產生負溢位。當它大於2w-1 -1時,產生正溢位。
例如:(int型別的最大正數為:231-1 = 2147483647)
int y=2147483647+1輸出:y=-2147483648; printf(
"y=%d
",y);
補碼的非運算
無符號乘法
其中 x*y指實數內的乘法。
有符號乘法
乘以常數
對於無符號和有符號變數x:c表示式 x
例如:14=2^3+2^2+2 所以 x*14=(x<<3)+(x<<2)+(x<<1)
或14=2^4-2 所以 x*14=(x<<4)-(x<<1)
-6=2-8 所以 x*(-6)=(x<<1)-(x<<3)
除以2的冪
整數除法總是捨入到零,對於x>=0,y>0 ,結果是
(下取整),對於x<0,y>0,結果是
(上取整)
對於無符號變數x:c表示式x/2^k等價於x>>k。(邏輯右移)
對於有符號變數(補碼)x:表示式x/2^k等價於(x<0 ? (x + (1<>k。(算術右移)
(當x<0時,x上加上乙個適當的偏移量(2^k-1),再執行算術右移,使結果正確捨入)
計算機系統結構 計算機 計算機系統的基本結構
乙個完整的計算機系統是由計算機硬體系統和計算機軟體系統兩部分組成。硬體是計算機的實體,又稱為硬裝置,是所有固定裝置的總稱。它是計算機實現其功能的物質基礎,其基本配置可分為 主機 鍵盤 顯示器 光碟機 硬碟 軟盤驅動器 印表機 滑鼠等。軟體是指揮計算機執行的程式集,按功能分系統軟體和應用軟體。1 由運...
計算機系統
一陰一陽之為道。早在幾千年我國古人就知道天地萬物皆由正反兩個東西組成的。自從人類進入電氣時代,隨著電子元件的快速發展,各種裝置隨之誕生了。一些元件 例如閘流體 可以根據電壓的高低變化自行導 通或者關斷。如果是高電壓導通,就規定是1 低電壓導通規定是0,那麼眾多的這些元件組成的乙個整體就可以0 和1來...
計算機系統
做加法時,主要判斷是否溢位 無符號加溢位條件 cf 1 帶符號加溢位條件 of 1 舉例 若n 8,計算107 46 107 0110 1011 46 0010 1110 01001 1001 溢位標誌of 1 零標誌zf 0 符號標誌sf 1 進製標誌cf 0 無符號 sum 153,因為cf 0...