① 關於c語言整型數據的溢出問題~~求高手多指點~~
對於整數,反碼,補碼與原碼相同。
對於負數,補碼是原碼的符號位不變,數值部專分按位取反再屬加1。
知道負數補碼,可以對改補碼再一次求補碼,就可以得到原碼。
假設你是16位系統。
100000000000000 求補=1 11111111111111+1=00..00
b就溢出為0了。
不過現在都是32位系統了,int類型都是4個位元組的都,a表示成00..00100000000000000了。
樓主的的這個程序不能造成溢出。
所以printf ("%d",b);列印出來的b應該是32768,也不是 -32768
② (c語言)整型數據的溢出
其實這個復問題很簡單的,這個制可能和你編譯器環境有關,int 類型表示範圍是-32768-32767。所以你可以把它的表示範圍比作一個圓。因為在電腦中負數是按補碼保存的,所以加1之後會出現進位。如果是char 類型表示-128-127的話,那麼char a = 128也會變成-128的。
你可以看一下下面的圖,這個圓就好比表示的范圍。如果不信的話你可以將int a = 32769;試試的,輸出應該會變成-32787
③ C語言數值溢出時,如何運算,請舉例,謝謝!
數值溢出,超界需自己寫語句檢查和控制。
例如,除數和分母不得為0。負數不能開平專方。
解一元二次方屬程
float a,b,c,x1,x2;
float b4ac;
b4ac = b*b + 4.0 * a * c;
if (a != 0.0 && b4ac > 0.0) {
x1 = (-b + sqrt(b4ac)) / 2.0 / a;
x2 = (-b - sqrt(b4ac)) / 2.0 / a;
} else if (a != 0.0 && b4ac < 0.0) {
// 添入處理 負數不能開平方 的語句
} else if ( a == 0.0) {
// 添入處理 分母為0 的語句
}
④ C語言關於整型數據溢出的問題
關於long型在計算機內存儲方式,參看:
http://..com/question/112869407.html
yyrryyrr2的回答
-----------------------------------------------------
printf("%d\n%ld",a,b);中
printf將"%d\n%ld",a及b依次壓入棧中
printf內部的可變參數分解函數從棧中取出數據替代%d,
依你的輸出結果你用的是16位編譯器。
棧從低地址到高地址數據為:
地址(假設) 數據
0xf000 0x3000(指向("%d\n%ld")
0xf002 0x7fff(即32767)
0xf004 0x8000 (即32768)
0xf006 0x????(此處為main函數的局部變數)
那麼printf首先接受一個16位的int型,取出0x7fff調用_itoa將其轉化成數字字元並替換%d。
然後printf需要取出一個32位long型數據,從0xf004處,可是你只給入了一個16值,所以取出的32位值包含垃圾信息(有16位是main函數的局部變數或垃圾信息),是0x8000????形式,而實際上????處恰好包含了0x0000(這點從你第二個printf調用即可看出,後一堆垃圾數據是0x0000),所以最終輸出數字0x80000000即-2147483648
對後兩個printf的分析類似
第二個調用雖然傳入兩個可變參數,但是由於有3個%d,所以前兩個取出後,繼續從棧上取數據,取出了main的棧楨的數據0x0000
最後一個printf調用再取了更後面的數據。
--------------------------------------------------
樓主喜歡探究問題的根源。
你可以翻看我的網路回答關於c/c++的回答,會令你受益匪淺
⑤ c語言 整型數據溢出問題
int 型 佔4位元組(所佔位元組和編譯器有關的,此處所說的是在VC上,比如在TC或BC上佔2位元組)版
有符號 int 范圍權 -2^31~2^31-1
無符號 int 范圍 0~2^32-1
如果超出這個范圍就會溢出
⑥ c語言整形數據溢出怎麼辦
C語言的強大之處就在於他的靈活性,程序員自己把握。編譯器可以幫助預防錯誤,版但有些程序會權利用溢出,所以溢出不完全是錯誤的事情。
1、溢出:
數據類型超過了計算機字長的界限而出現的數據溢出;
2、溢出可能原因:
當應用程序讀取用戶數據,復制到應用程序開辟的內存緩沖區中,卻無法保證緩沖區的空間足夠時 (假設定義數組int Array[10], 而在調用時使用Array[11] 或存放的數據超過int類型容量等), 內存緩沖區就可能會溢出.
3、溢出因素分析:
由於C/C++語言所固有的缺陷,既不檢查數組邊界,又不檢查類型可靠性,且用C/C++語言開發的程序由於目標代碼非常接近機器內核,因而能夠直接訪問內存和寄存器,只要合理編碼,C/C++應用程序在執行效率上必然優於其它高級語言。然而,C/C++語言導致內存溢出問題的可能性也要大許多。
⑦ 急求 c語言整型數據溢出怎麼辦
^unsign long 的數據可以表示的范圍應該是0~4294967295(2^32),也就是10的9次方級別。
你單用浮點(float)還內是屬於單精度的,同樣容無法超越32位機器限制。
你都搞到10的9次方的平方去了,相當於10的18次方,不溢出才怪呢。
如果換成雙精度浮點型(double)應該能滿足你的需要了。
⑧ (c語言)整型數據的溢出怎麼寫
這個是計算機中的負數補碼表示
假定有符號的最大值(二進制) 為0111...111 後面若干個1 當然版 取決於計算機的位長度權
增加1之後溢出的話 就成了 1000...000 這個時候符號位就變成了1 也就是會被判定為負數
然後再轉換成十進制自然就是負數了
⑨ C語言整型溢出問題
首先,C語言只要求long型數據長度不短於int型,short型不長於int型,並沒有規定以版上各數據類型所權占內存的位元組數,具體要看你是在哪個編譯器下編譯的而定;然後,z是long型,輸出格式不應該是%ld嗎?#如果確認了所用編譯器和你所寫的無誤後,具體可以用if語句判斷一下。附:用TurboC/TurboC++時:int(系統默認是有符號的,下同)-32768~32767;long:-2147483648~2147483647
⑩ c語言整型數據溢出
i為char型數據,最大127,while(i++)當為127時相當於128了,條件不成立退出循環所以停止運行,