4、整數溢位
(1)無符號數(0、+),不可能發生溢位,當它超過範圍時,從0開始重新計數
有符號數(-、0、+),可能發生溢位,並且「溢位」的結果不固定
(2)當乙個無符號數和有符號數相加的時候,有符號數自動轉化為無符號數
(3)判斷溢位
方法一:強制轉換成無符號數
if( (unsigned) a + (unsigned) b > int_max )
fun();
方法二:利用(2)判斷溢位
if( a > int_max -b )
fun();
(5)常用誤區
方法一:無符號數運算結果為無符號數,無符號數始終大於等於0
if( i - j >= 0)假設i和j都為無符號數,則可能引起錯誤,這個式子始終成立,因為無符號數始終大於等於0
方法二:strlen返回的是無符號數
if(strlen(b)-10>=0)這個式子始終成立(牛!!!!!),正確寫法如下:if( strlen(a) >= 10 )
參考見語言中的 整數溢位)
5、getchar異常情況
char c;
while((c = getchar()) != eof)
putchar(c);
getchar函式在一般情況下返回的是標準輸入檔案中的下乙個字元,當沒有輸入時返回eof。
用char來存放getchar的返回值,則會發生截斷,發生各種不可預知的結果。
C陷阱與缺陷(小結2)
語法分析 語句 宣告的語法細節 1.理解函式宣告 任何c變數的宣告都由兩部分組成 型別以及一組類似表示式的宣告符 如 float h 其中型別為float,宣告符為 h 整個宣告表示 h 為乙個函式指標,h所指向函式的返回值為浮點型。由乙個給定型別的變數的宣告得到該型別的型別轉換符 將變數名和宣告部...
C陷阱與缺陷(小結2)
語法分析 語句 宣告的語法細節 1.理解函式宣告 任何c變數的宣告都由兩部分組成 型別以及一組類似表示式的宣告符 如 float h 其中型別為float,宣告符為 h 整個宣告表示 h 為乙個函式指標,h所指向函式的返回值為浮點型。由乙個給定型別的變數的宣告得到該型別的型別轉換符 將變數名和宣告部...
c陷阱與缺陷 陷阱
例1 if x y break 這就話的意思就是把y賦值x,判斷x是否為0,實則是在判斷y是否為0 例2 while c c t c n 這句話的意思就是 c t c n 賦值給c,而有 符本身就是不為0的數,所以這就是while 1 的意思。例3 int x 4,p new int p 2 cou...