c語言程式執行結果為什麼出現1 INF

時間 2021-05-04 18:26:43

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函式中又定義了...