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....