不同的输出为正值和负值

时间:2012-10-08 13:32:02

标签: 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;
}

我得到82作为输出,但如果我用if(-1<=SIZE)替换if(0<=SIZE)或用if(1<=SIZE)替换if子句中的-1为0或非负数,那么我得到81作为输出。为什么我会得到不同的输出?

1 个答案:

答案 0 :(得分:10)

sizeof运算符返回size_t,这是无符号整数类型。当您将-1转换为无符号整数时,您会得到一个非常大的数字。

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