当把整形操作数混合使用时,结果可能是有符号数,也肯能是无符号数,取决于操作数的类型相对大小。---------《c专家编程》第一章
eg.
#define ARRAY_LENGTH(a) (sizeof(a)/sizeof(a[0]))
int main(int argc, const char * argv[])
{
int a[5] = {1,2,3,4,5};
int len = -1;
if(len<ARRAY_LENGTH(a))cout<<"TRUE"<<endl;
else cout<<"FALSE"<<endl;
return 0;
}
程序运行结果“FALSE”,原因是sizeof()返回的为unsigned型,所以在if判断中,len被提升到unsigned型,-1的二进制形式FFFFFFFF,作为无符号型,表示32位最大的正整数,十进制43亿多,因此数组的长度,小于len返回false.