这个问题在这里已有答案:
你可以证明以下代码:
#include<stdio.h>
int main()
{
if(sizeof(int) > -1)
{
printf("\nTrue\n");
}
else
{
printf("\nFALSE\n");
}
}
输出是FALSE
.....建议我的原因
sizeof(int)
的类型为size_t
,它是无符号整数类型。
-1
的类型为int
,它是一个有符号整数类型。
将有符号整数与无符号整数进行比较时,首先将有符号整数转换为无符号整数,然后使用两个无符号整数执行比较。
sizeof(int) > (unsigned int)-1
是假的,因为在大多数实现中(unsigned int)-1
是一个非常大的数字(等于UINT_MAX,或者适合unsigned int
的最大数字)。
sizeof
产生无符号类型的值(即size_t
)。
在sizeof(int) > -1
表达式中,通常的算术转换适用,并且-1
被转换为无符号类型的sizeof
,这导致大于-1
的无符号值。
这是因为sizeof
运算符返回无符号整数类型。与有符号整数类型进行比较时,有符号整数将转换为无符号整数。因此,实际上,您将sizeof(int)
与最大可能的无符号整数进行比较。
您可以强制通过强制转换来签署大小:
#include <stdio.h>
int main()
{
if((int)sizeof(int) > -1)
{
printf("\nTrue\n");
}
else
{
printf("\nFALSE\n");
}
}