不同的输出为正值和负值

Vai*_*wal 3 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;
}
Run Code Online (Sandbox Code Playgroud)

我得到82作为输出,但如果我更换if(-1<=SIZE)if(0<=SIZE)或与if(1<=SIZE)装置-1如果子句0或非负数,然后我得到81作为输出.为什么我会得到不同的输出?

Som*_*ude 10

sizeof操作者返回一个size_t它是一个无符号的整数类型.当您转换-1为无符号整数时,您将得到一个非常大的数字.

在构建时打开更多警告,编译器将警告您有关比较已签名和未签名的数据类型.

  • @Dan不,未签名的"胜利". (2认同)