天天看點

大小比較的類型不比對問題

char c[10000];

...........//省略n行代碼

if ( c[0] == 0xaa ) ............

編譯器說comparison is always false due to limited range of data type

于是把if括号裡表達式寫成(int)c[0] == 0xaa,就是先強制轉換再比較,但是編譯器還是提示上面的東西

不管它,直接運作,運作結果和預想的不一樣。。。。。。好吧,編譯器你赢了

于是寫了段測試代碼:

//===================================================

char c = 0xaa;

if ( (int)c == 0xaa ) printf("True"); else printf("False");

//===================================================

運作結果是False

換個類型:

//===================================================

char c = 0xaa;

if ( (unsigned int)c == 0xaa ) printf("True"); else printf("False");

//===================================================

結果還是False

實際上,(int)c的值是-86,而(unsigned int)c的值是4294967210,都不是0xaa

原因看另一篇日志吧。

最後我是這麼改的:

if ( c == (char) 0xaa ).........

ok了