c語言資料溢位,C語言資料溢位

2022-02-16 17:35:58 字數 3128 閱讀 4702

1樓:天上的一條龍

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

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

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

2樓:帶淚的紫藤花

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

3樓:漠東野狼

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

c語言關於資料溢位

4樓:聽不清啊

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

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

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

5樓:封望張廖雁露

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

inta=32768,b=-32769;

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

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

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

急求 c語言整型資料溢位怎麼辦

6樓:匿名使用者

按道理10的9次方是在無符號長整形範圍內,不應該會溢位的.

7樓:匿名使用者

unsign long 的資料可以表示的範圍應該是0~4294967295(2^32),也就是10的9次方級別。

你單用浮點(float)還是屬於單精度的,同樣無法超越32位機器限制。

你都搞到10的9次方的平方去了,相當於10的18次方,不溢位才怪呢。

如果換成雙精度浮點型(double)應該能滿足你的需要了。

8樓:匿名使用者

lz用char s[1000]來計算,每個位元組存放一個位

c語言 整型資料溢位問題

9樓:士兄揚羽

#include "stdio.h"

#include "conio.h"

main()

a=32767 b=-32768

0111111111111111 3276732767加1後變為

1000000000000000 為 -32768的補碼形式

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

10樓:

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

11樓:

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

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

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

c語言中數值溢位的問題

12樓:匿名使用者

如果說短整型的長度是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

13樓:匿名使用者

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

14樓:匿名使用者

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

c語言資料溢位時的值是負值嗎

15樓:匿名使用者

當整型資料超出取值範圍時 資料呈環形變化 例如32767 + 1 = -32768 36767 +2 = -32767

-32768 -1 = 32767 -32768 - 2 = 32766

理解一下 希望這個例子能幫助你

16樓:匿名使用者

資料溢位要看溢位多少,兩個很大的數相加,溢位結果還是正數,只是變小了。

17樓:匿名使用者

不對。資料溢位分為上溢位和下溢位兩種情況。另外資料儲存在變數裡時與變數的資料型別密切相關。所以溢位現象要分類討論。

例如,unsigned int型或unsigned short型或unsigned char型變數在上溢位時,將捨去超範圍資料,其值仍然為正。

附上測試程式:

#include

void main(void)

c語言中,整型資料的溢位中為什麼32767 1 367678請給出詳細過程如果

我說了可能你不同意 計算機根本不知道有什麼負數或正數,它就是對一串定長的01序列按二進位制規則進行加法運算,在16位二進位制平臺下一共有2 16個排列,人們把這些排列用來替代負數 0和正數,並使二進位制 1時對應的十進位制數也是 1的值,這樣,它們的範圍剛好是十進位制的 32768 32767。當3...

c語言資料型別問題,C語言資料型別如何轉換

你這答案有點問題哦,前邊兩個元素是陣列,int和float都是四位元組,char是一個位元組,總共 4 3 4 16 44位元組,如果我算錯了你告訴我,我也學學 c語言資料型別如何轉換?不是有強制型別 轉換嗎?強制型別轉換 強制型別轉換 當運算元的型別不同,而且不屬於基本資料型別時,經常需要強制型別...

c語言資料型別的轉換C語言資料型別的轉換

讓我來說說這個問題吧。一.自動轉換 自動轉換遵循以下規則 1 若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。2 轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。a.若兩種型別的位元組數不同,轉換成位元組數高的型別 b....