sizeof运算符在以这种方式使用时给出输出false

时间:2014-07-16 10:19:21

标签: c unix unsigned-integer

我无法理解为什么这段代码输出False:

   if (sizeof(int) > -1)
       printf("True");
   else
       printf("False");

当我尝试打印sizeof(int)返回的是4时。

2 个答案:

答案 0 :(得分:3)

sizeof运算符的结果类型为size_t。您的-1signed int。比较两者时,后者将转换为size_t,从而产生相当大的无符号值。

答案 1 :(得分:1)

按标准sizeof返回unsigned integer type size_t。虽然确切的类型是实现定义的,但肯定是无符号的。当您尝试将其与有符号整数-1进行比较时,-1将转换为此类型的最大值(尝试编写(unsigned)-1并检查该值),因此比较结果为false。