1樓:茆詩蘭光冰
c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。
所有的無符號運算都是以2的n次方為模。如果算術運算子的一個運算元是有符號書,另一個是無符號數,那麼有符號數
會被轉換為無符號數(表示範圍小的總是被轉換為表示範圍大的),那麼溢位也不會發生。但是,當兩個運算元都是有符號數
時,溢位就有可能發生。而且溢位的結果是未定義的。當一個運算的結果發生溢位時,任何假設都是不安全的。
例如,假定a和b是兩個非負的整型變數(有符號),我們需要檢查a+b是否溢位,一種想當然的方式是:
if(a+b
<0)溢位;
實際上,在現實世界裡,這並不能正常執行。當a+b確實發生溢位時,所有關於結果如何的假設均不可靠。比如,在某些
機器的cpu,加法運算將設定一個內部暫存器為四種狀態:正,負,零和溢位。在這種機器上,c編譯器完全有理由實現以上
的例子,使得a+b返回的不是負,而是這個記憶體暫存器的溢位狀態。顯然,if的判斷會失敗。
一種正確的方式是將a和b都強制轉換為無符號整數:if(
(unsigned)a
+(unsigned)b
>int_max)
溢位;這裡的int_max值為有符號整型的最大值。在一般的編譯器裡是一個預定義的常量。ansi
c在limits裡定義了int_max,值為
2的31次方-1.
不需要用到無符號算數運算的另一種可行方法是:
if(a
>int_max-b
)溢位;ps:
有符號數的最高位(31位)為符號位,最高位為0的時候,表示正,為1的時候表示負。運算時,符號位不參加運算,但是如果兩個數相加,30位需要進1時,那麼即表示溢位。
輸入一個整數,如何判斷輸入是否溢位了
2樓:聽不清啊
#include
#include
int main()
if(strlen(p)>>0)
printf("輸入溢位\n");
else
return 0;}
怎麼判斷int型別溢位 j**a
3樓:逆心小土豆
(1)無符號整數相加,如果結果小於其中任何一個,則溢位;
bool isoverflow(unsigned x, unsigned y)
(2) 有符號整數相加,比無符號的相對複雜一點兒:
如果兩個整數相加<0,或者兩個負數相加》0,(負數在計算機中用補碼錶示)則溢位。
bool isoverflow(int x, int y)(3)如何判斷一個輸入或者轉化轉化的單個數字是否溢位;if( num>0x7fffffff || num<(signed int)0x80000000)
int型別的最大正數:0x7fffffff;
int型別的最小負數:0x80000000;
matlab中怎麼判斷一個整數有沒有溢位(雙精度結構下)
4樓:濯楚雲
很簡單啊,加一個data type conversion,把它的輸出型別設定為double就行了。
雖然晚了三年才看到,但是希望能幫到後來人。
如何檢測c/c++中的整數溢位
5樓:喰種
今天做到一個演算法題,結果沒有搜到解決方案。方法可能比較繁瑣,不知道對不對,如果不對,請點右下角的反對,並且歡迎補充
對於a,b的算數運算檢測溢位
加法:如果a,b同正或同負,if(abs(a)+abs(b) 減法參考加法的比較,只是換個符號 乘法:if(a*b/b!=a) a*b溢位 若n n n,n,n均為正整數,則n為完全平方數c語言中,include 直接對n開平方,如果有 sqrt n int sqrt n 則n為完全平方數 sqrt 函式是math庫中的開平方函式,如果開方結果與取整結果一樣,則符合要求.1 擷取字串 擷取字串可以說是字串處理功能中最常用的一個子功能了,... 女人出軌表現之三 粥 沒資訊 男人細心點可以發現,女人跟曖昧異回性談話的時候,語調會低一答 些,聲音也會更加甜美,而妻子頻繁低聲細語地煲 粥則也是女人出軌的徵兆之一。不過聰明的女人在出軌後並不會那麼容易洩露蛛絲馬跡,而會把所有跟私隱相關的聊天資訊都刪除掉。這個還真bai讓人頭痛。1.找個du私家偵探... 如何判斷心理是否健康 一個人的健康不僅僅是身體的健康就是可以的,還要的就是心理健康,那您是否知道心理健康標準是什麼呢?您知道如何保持心理健呢?心理健康標準 健康特徵一 暗示 好的,我們的心理,多是受周圍的環境影響而影響的。所以,一個人的心理是不是健康的,就要看他受自身周圍的環境暗示影響大不大。所謂波...c語言中如何判斷整數是否為平方數
如何判斷老婆是否出軌,怎麼判斷老婆是否出軌?
怎麼判斷自己心理是否健康,如何判斷自己是否心理健康呢