2011-09-15 7 views
1
#include "stdafx.h" 
#include<stdio.h> 
int aarray[]={1,2,3,4,5,6,7,8}; 
#define SIZE (sizeof(aarray)/sizeof(int)) 

int main() 
{ 
    printf("%d\n",SIZE); 
    if(-1<=SIZE)printf("1\n"); 
    else printf("2\n"); 
    return 0; 
} 

なぜ2が印刷されますか? SIZEは-1より大きい8なので、1を出力するはずですが、なぜ2を出力していますか?私の理解を助けてください。マクロをcで使用する

+0

ありがとうsidyllとcnicutar。 – Angus

答えて

6

符号付きの値(-1)と符号なしの値(SIZEの値は符号なしでsize_tです)を比較しています。

したがって、-1は、符号なしに昇格され、SIZEより大きくなります。

2

お気に入りのCブックでタイププロモーションを見てみましょう。 sizeofの結果は符号なしであり、-1は符号なしに変換されます。これは大きな数値です。

関連する問題