日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C专家编程—使用unsigned int可能产生的Bug(1)

發(fā)布時間:2024/4/18 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C专家编程—使用unsigned int可能产生的Bug(1) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

???????在vs2008環(huán)境下,如下代碼顯示不同的結果:

?

???????? #include<stdio.h>

???????? #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))
???????? int array[] = {23,34,12,17,204,99,16};
???????
??

???????? int main(void)
??????? {
????????? ?? int d = -1;
?????????? ?if(d <TOTAL_ELEMENTS-2)
??????????????? ?? printf("success/n");
????????? ? else
???????????? ????? printf("failed/n");
?????????? ?return 0;???
??????? }

?

?????? 結果顯示failed,而將if(d <TOTAL_ELEMENTS-2)改成if(d <(int)TOTAL_ELEMENTS-2),結果顯示的是success。

?????? C專家編程對此分析的原因是:TOTAL_ELEMENTS所定義的值是unsigned int 類型(因為sizeof()的返回類型是無符號數(shù))。if語句在signed int和unsigned int之間測試相等性,所以d被升級為unsigned int類型,-1轉換成unsigned int的結果將是一個非常巨大的正整數(shù),致使表達式的值為假。要修正這個問題,只有對TOTAL_ELEMENTS進行強制類型轉換即可。

?

?????? 啟發(fā):一、盡量不要再你的代碼中使用無符號類型,以免增加不必要的復雜性。
??????????????? 二、盡量使用像int那樣的有符號類型,這樣在涉及升級混合類型的復雜細節(jié)時,不必擔心邊界情況(如-1被翻譯為非常大的數(shù))。

?????????????? 三、只有在使用位段和二進制掩碼時,才可以用無符號數(shù)。應該在表達式中使用強制類型轉換,使操作數(shù)均為有符號數(shù)或無符號數(shù),這樣就不必由編譯器來選擇結果的類型了。

?

?

總結

以上是生活随笔為你收集整理的C专家编程—使用unsigned int可能产生的Bug(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。