1樓:
是因為運算結果溢位。
解決辦法,例:
chara=126,則a+45=126+45=172-256=-85
uchara=2,則a-100=-98+256=158
a,b基本型別相同時,有符號與無符號數的轉換:
無符號a-->有符號b
if(a
elseb=a-[max_count]
有符號數a-->無符號數b
if(a>0)b=a
elseb=a+[max_count]
例1chara=-119;ucharb=a;則b=-119+256=137
例2uchara=137;charb=a;則b=137-256=-119
例3signedcharchr=127;
intsum=127;
chr+=10;
sum+=chr;
sum值是
思路先把chr當成無符號數,chr+=10變成137然後把chr轉化為有符號數137-256=-119-119+sum(127)=8
擴充套件資料
溢位的原因,考慮兩個非負整數x和y,滿足0<=x,y<=(2^w)-1。xy可以被表示為w位無符號數字,然而考慮它們的和的話,我們可以得到0<=x+y<=2^(w+1)-2。這個和需要w+1位來表示。
如果再用其他數加上這個結果的話,可能又將需要w+2,w+3位來表示新的結果。
這種持續的「字長膨脹「意味著,如果想要完整地表示算數運算的結果,就不能對字長做任何限制(實際上lisp就是這樣幹的)。如果限制了資料型別的字長,溢位的發生是不可避免的。由於溢位後的結果往往不是想要的結果,必須對溢位時的情形另做處理,但在此之前我們必須得先能夠判斷什麼時候發生了溢位。
無符號整數的溢位判斷比較簡單:對乙個字長w的無符號數加法運算,當x+y>=2^w時,第w+1位被程式捨去,相當於在x+y的和的基礎上減去了2^w。由於x,y<=(2^w)-1,所以有x+y
intuadd_ok(unsignedx,unsignedy)
2樓:伍拾步
當你輸入的c,n值過大的時候,運算結果就會溢位(資料過大或過小超過計算機所能儲存的值。。。),就出現你說的那種情況了
你用0.5,0.2試試。。。
3樓:匿名使用者
不大明白啊
把程式貼上來看看
4樓:一起聽風賞雨
我也遇到你說的問題了,你是怎麼解決的,求組!!!謝謝
5樓:夢的田
那你最後是怎麼解決的?
c語言出現-1.#ind00怎麼回事?
6樓:匿名使用者
你給的程式不完整,函式 void nono() 在程式**中沒有,請給出完整的程式
而且fun 函式沒有返回值,在main 函式中的變數sum 的怎麼得到?
這個程式編譯就通不過,根本不可能有結果
如果你是在vc 環境下執行的,結果可能是上乙個程式的
C語言為什麼這個程式執行沒有輸出的結果?與結構體陣列有關
十四行 struct student p stu 中間加個student 二十九行 if strcmp stu i major,t 0 因為是字串,所以要用雙引號,而不是單引號。三十二行 else if strcmp stu i major,w 0 同理 三十五行 else if strcmp st...
程式執行後的輸出結果是,c語言,以下程式執行後的輸出結果是
32768正確 乙個整型變數只能容納 32768 32767範圍內的數,無法表示大於32767的數。遇此情況就發生溢位,但執行時並不報錯。數值達到最大值時後,從最小值計數,所以32768 32767 1,在c裡就又回到 32768了 把int b 改成long b b ld 再試試看 根據編譯器的不...
c語言下列程式執行結果int a 7,b
岔路程式緣 下列程式的執行結果是 d include int a 7,b 3 void fun int x,int y main a.4,7 b.7,3 c.2,6 d.8,6 答案選d,原因是 1 首先程式開頭定義的a 7,b 3屬於全域性變數。它在所有函式中有效。2 其次在main函式中又定義了...