C 正值和负值的不同输出

C 正值和负值的不同输出,c,if-statement,c-preprocessor,C,If Statement,C Preprocessor,考虑以下代码: #include<stdio.h> int array[]={1,2,3,4,5,6,7,8}; #define SIZE (sizeof(array)/sizeof(int)) int main() { printf("%d",SIZE); if(-1<=SIZE) printf("1"); else printf("2"); return 0; } #包括 int数组[]={1,2,3,4,

考虑以下代码:

#include<stdio.h>
int array[]={1,2,3,4,5,6,7,8};
#define SIZE (sizeof(array)/sizeof(int))

int main()
{
        printf("%d",SIZE);
        if(-1<=SIZE) printf("1");
        else printf("2");
        return 0;
}
#包括
int数组[]={1,2,3,4,5,6,7,8};
#定义大小(sizeof(数组)/sizeof(int))
int main()
{
printf(“%d”,大小);

如果(-1则
sizeof
运算符返回一个
size\u t
无符号整数类型。将
-1
转换为无符号整数时,会得到一个非常大的数字


构建时打开更多警告,编译器将警告您比较有符号和无符号数据类型。

比较不应该强制双方都使用有符号数据类型吗?我认为这是默认值。Thanx Joachim,这真的让我很生气。@Dan:这是混合无符号和有符号数据类型的窍门——这就是为什么许多人会重新使用如果要对有符号整数进行算术运算并限制无符号位操作,请务必使用有符号整数(参见示例)