#include <stdio.h>
main()
{
if (sizeof(int) > -1)
printf("True");
else
printf("False");
}
答案:
假
但根据逻辑sizeof(int)
返回2和if(2>-1)
返回1,它应该打印为True。
为什么表现不佳?
答案 0 :(得分:2)
sizeof
是一个返回大小的运算符,返回值类型为unsigned int
。
由于unsigned
的排名高于singed
类型,因此-1被视为无符号数。
在这种情况下,-1被视为0xFFFF。
因此if (sizeof(int) > 0XFFFF)
评估为false
。
答案 1 :(得分:1)
如果你写
if ( ( int )sizeof(int) > -1)
您将获得True
的预期结果。
运算符sizeof返回类型size_t
的值,该值对应于某些实现定义的无符号整数类型。
来自C标准(6.5.3.4 sizeof和alignof运算符)
5两个运算符的结果值是实现定义的, 及其类型(无符号整数类型)是size_t,在(和其他标题)中定义。
size_t
的排名在任何情况下都大于或至少等于int
类别的排名。这意味着当编译器需要确定表达式的类型时,它转换操作数会将rank降低到具有更高rank的操作数的类型。如果操作数具有相同的等级但是一个操作数具有无符号整数类型而另一个操作数具有有符号整数类型,那么公共类型是无符号的int类型。
因此在if语句
的条件下if ( sizeof(int) > -1)
-1
被转换为无符号整数类型size_t
,并且由于其内部表示,其中所有位都设置为1,而不是sizeof( int )
的值