如何判斷整數運算是否溢位

2021-09-10 02:08:08 字數 910 閱讀 1025

固然可以使用乙個更大範圍的數來儲存結果並判斷是否溢位,但如果已經是系統或語言支撐的最大整數型別了呢?

先給出結論:

對於無符號整數

運算型別

溢位型別

判斷沒有溢位

注意s=x+y

可能上溢

s≥x不能使用s-x==y來判斷

s=x-y

xx>=y

nam=x*y

可能上溢

(x==0&&m==0) || (x!=0&&m/x==y)

nam=x/y

不會溢位

1==1

na對於有符號整數

運算型別

溢位型別

如何判斷

注意s=x+y

可能上溢或下溢

!((x>=0&&y>=0&&s<0)||(x<0&&y<0&&s>=0))

nas=x-y

可能上溢或下溢

!((x<0&&y>0&&s>=0)||(x>0&&y<0&&s<=0))

nam=x*y

可能上溢

!x || m/x==y

nam=x/y

不會溢位

nana

無符號整數

我們要證明當s>=x時沒有溢位,先討論x、y的大小:如果x>=y,則s>=x會傳遞到s>=y,符合加法性質;如果x=min(x,y)時,依舊能判斷是否溢位;

使用反證法,我們假設當s>=x時有溢位,則溢位值s』=x+y-max,有x+y-max>=x,有y>=max,當取等號時,y=max,x=0,s』=0時,沒有溢位但是還是有s>=x,與假設矛盾;如果取大於號,顯然與定義矛盾,從而得證。

再證明使用s-x==y不能判斷是否溢位,我們這裡取3位無符號整數,max=8,x=4,y=5,則s=x+y-max=1發生溢位,但s-x=-3在無符號是5 == y。

如何判斷整型算數運算是否溢位

乙個算術運算溢位,是指完整的整數結果不能放到資料型別的字長限制中去。溢位的原因是顯而易見的,考慮兩個非負整數x和y,滿足0 x,y 2 w 1。xy可以被表示為w位無符號數字,然而考慮它們的和的話,我們可以得到0 x y 2 w 1 2。這個和需要w 1位來表示。如果我們再用其他數加上這個結果的話,...

整數溢位,如何判斷整數溢位

c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...

整數溢位,如何判斷整數溢位

c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...