關於c語言資料溢位的問題,關於c語言資料溢位的問題

時間 2022-02-01 19:04:08

1樓:發假或一半訊息絕戶

//你的程式是沒有問題的,但是輸入的時候應該輸入 15:30:45 ,

//而不是15 30 45 ,如果你確實輸入的是15:30:45 這種形式,那

//麼檢查你的輸入法,在輸入螢幕上一定要是英文,這不是溢位的//問題,只不過當你沒按正常讀入值的時候等於沒有賦初值,沒賦//值就是乙個很大的負數,我鬱悶,這個咋還沒解決呀,我都執行你的程式了,根本就沒問題,vc裡面乙個整型佔4個位元組,6位數是不可能溢位的啊

2樓:匿名使用者

什麼問題你沒說啊

程式沒有邏輯問題,不過輸入格式有點繁,如果輸入資料格式錯誤就會輸出錯誤答案,比如你要輸1小時2分3秒時,需要輸入的資料是1:2:3才行

3樓:

將第一行的定義變數int h,min,s; 改為long h,min,s;

試下,可能是由於在t=h*3600+min*60+s; 計算右邊時採用的是整型得出乙個負數,又進行強制型別轉換為 長整型的了

c語言學了半年了,考完ncre 就不太熟了再就是你確定下你輸入的冒號是不是採用的都是英文標點

4樓:匿名使用者

因為你輸入的是全形符號,應該輸入半形符號

5樓:匿名使用者

把所有的定義全變為 double 我包準你錯不了 呵呵 佔記憶體就占去唄,能對就行 你說是吧

6樓:匿名使用者

你用c-free試試,我用那個試的沒問題

7樓:匿名使用者

有錯嗎?我這裡沒有錯

c語言 整型資料溢位問題

8樓:士兄揚羽

#include "stdio.h"

#include "conio.h"

main()

a=32767 b=-32768

0111111111111111 3276732767加1後變為

1000000000000000 為 -32768的補碼形式

注:資料在儲存是都是以二進位制的補碼形式儲存的。。。

9樓:

int型別一般是-32768~32767,你這數字明顯超出範圍啊。

10樓:

資料儲存到記憶體是按照2進製儲存的

int型只能儲存32位(二進位制),如果超出了就會把前邊的溢位了,就是保留後邊的,前邊的扔掉了

具體的還要涉及到正數和負數的問題,有符號的話,第一位是表示符號的

關於c語言中的溢位問題

11樓:稻草人生活印記

無符號整數運算過程中發生溢位時,結果是有定義的,這就要看你是否有形參。

12樓:聽不清啊

這種計算是錯的。

c語言並不檢查運算過程中是否「溢位」。即使溢位仍然繼續運算的。

(c語言)整型資料的溢位

13樓:匿名使用者

其實這個問題很簡單的,這個可能和你編譯器環境有關,int 型別表示範圍是-32768-32767。所以你可以把它的表示範圍比作乙個圓。因為在電腦中負數是按補碼儲存的,所以加1之後會出現進製。

如果是char 型別表示-128-127的話,那麼char a = 128也會變成-128的。

你可以看一下下面的圖,這個圓就好比表示的範圍。如果不信的話你可以將int a = 32769;試試的,輸出應該會變成-32787

14樓:匿名使用者

這個是計算機中的負數補碼表示

假定有符號的最大值(二進位制) 為0111...111 後面若干個1 當然 取決於計算機的位長度

增加1之後溢位的話 就成了 1000...000 這個時候符號位就變成了1 也就是會被判定為負數

然後再轉換成十進位制自然就是負數了

15樓:

你用的是16 bit的編譯器吧,16bit的編譯器的int範圍是,32767 ~ -32768

對於32 bit而言 int型,表示的範圍是2147483647~-2147483648

請注意,最大範圍是32767,不是32768;

32768的最高bit是1,1就表示負數

32768 --> 0x8000 = -32768

16樓:眾裡尋他

有符號位整型的最大為32767吧

c語言資料溢位

17樓:天上的一條龍

變數以補碼形式存在記憶體中,對於兩個位元組的int,總共有16位儲存。

範圍:-32768到32767,對應的補碼表示為1000 0000 0000 0000到0111 1111 1111 1111

32768,就相當於0111 1111 1111 1111 + 1,cpu用二進位制加法算出來的結果是1000 0000 0000 0000,對應的就是-32768

18樓:帶淚的紫藤花

有符號int型資料的取值範圍是-32768~32767,2個位元組總共16位,第一位為符號位,正數的話第一位為0,負數則為1,整數的取值最大是第一位為0,其後的十五位全為1,算過來也就是32767,如果如題所說,加上1之後,第一位變為1,其餘十五位全為0,轉換一下,其十進位制資料就是2的15此方,因為第一位為1,為負數,所以結果為-的2的15此方,也就是-32768~~~

19樓:漠東野狼

int型資料佔2個位元組,乙個位元組是8位,它的範圍就是-32768-32767,所以當a=32767時,再加1它就溢位,返回到-32768了

c語言中數值溢位的問題

20樓:匿名使用者

如果說短整型的長度是2個位元組,

short int 的範圍就是-32768~3276732768比最大值多1,也就是變成最小值了。

你的計算也不對。

應該是這樣計算的:32768是:1000 0000 0000 0000

要把這個補碼求原碼,即是補碼-1再取反,然後加上負號。

1000 0000 0000 0000 -1=0111 1111 1111 1111

取反即是:1000 0000 0000 0000 (正數32768)加上負號:-32768

所以結果是-32768

21樓:匿名使用者

c語言中對於負數的表示方法是它所對應的正數取反加1

那麼-1對應的正數為0000 0000 0000 0001取反 1111 1111 1111 1110加1 即1111 1111 1111 1111

那麼-32768 對應的正數為 1000 0000 0000 0000 取反 0111 1111 1111 1111 加1 即1000 0000 0000 000

22樓:匿名使用者

計算機沒有你想的那麼複雜。計算機會認為你當前資料型別的最大值+1會變成最小值。-1和-32768,那個最小啊?

c語言關於資料溢位

23樓:聽不清啊

這不是資料溢位。這是由於沒有指定小數字數(系統預設輸出6位小數,加上2位整數,就是要輸出8位數字),float只能保證7位有效數字,多餘位數上的數字是無效的。

如果以%.1f或%g格式輸出,就不會出這種錯了。

如果改為double型別(相應地,輸入語句要改為%lf格式),這樣可以有15位有效數字,也不會出這種錯的。

24樓:封望張廖雁露

在c語言中,資料的儲存就像乙個圓圈,正數溢位資料就會從最小負數開始,負數溢位資料同理,打個比方(簡略寫一下):

inta=32768,b=-32769;

printf("a=%d,b=%d",&a,&b);

則會輸出a=-32768,b=32767;

這樣則50000輸出就是(50000-32767)+(-32768)+(-1)=-15536

c語言關於整型資料溢位的問題

25樓:匿名使用者

關於long型在計算機內儲存方式,參看:

26樓:曾來福諶姬

資料儲存到記憶體是按照2進製儲存的

int型只能儲存32位(二進位制),如果超出了就會把前邊的溢位了,就是保留後邊的,前邊的扔掉了

具體的還要涉及到正數和負數的問題,有符號的話,第一位是表示符號的

關於c語言的問題,關於C語言的問題

鷹弈 1 有定義 int n 0,p n,q p 則以下選項中,正確的賦值語句是 d a.p 1 b.q 2 c.q p d.p 5 解 p為一級指標,其中p為指標的地址,q為二級指標,其中 q為指標的地址,只能給變數或指標變數賦值,不能給地址賦值,所謂地址,就是由acs碼構成,簡單的說,就是每個人...

關於C語言的簡單問題,關於C語言的6個問題

void的意思是空。main 其實是縮寫,寫全是int main 意思是函式又返回值。函式結束都會有return 0。意思是如果返回了乙個值,值等於0,那麼這個函式是能編譯的。因為如果返回了0,說明函式能執行完。有些時候你會發現後面並沒有return 0,那也只是省略了,但實質是有的。void ma...

關於C語言的問題

樓上的不對啊,不是getchar 在程式末尾處加個getch 或者在標頭檔案加 include,然後在程式末尾加system pause 語句,這兩個語句都可以使你的程式在所有語句執行完後停留住,直到你按下任意鍵 忍著被 首先你的迴圈只迴圈10次,只可能迴圈到f後邊的迴圈不到。其次,當計算機執行完程...