#include <stdio.h>
main()
{
if (sizeof(int) > -1)
printf("True");
else
printf("False");
}答:
错误
但是根据逻辑,sizeof(int)返回2和if(2>-1)返回1,它应该打印True。
为甚麽会有不同的表现呢?
发布于 2015-08-12 06:34:19
sizeof是一个返回大小的操作符,返回的值类型是unsigned int。由于unsigned的秩高于singed类型,因此-1被视为无符号数。-1在本案中被视为0xFFFF。因此,if (sizeof(int) > 0XFFFF)被计算为false。

发布于 2015-08-12 06:42:35
如果你写
if ( ( int )sizeof(int) > -1)您将得到预期的结果,即True。
运算符大小返回一个类型为size_t的值,该值对应于某些实现定义的无符号整数类型。
来自C STandard (6.5.3.4运算符的大小和对齐)
5这两个运算符的结果的值是实现定义的,及其类型(无符号整数类型)是size_t,定义在(和其他标头)中。
size_t的秩在任何情况下都大于或至少等于int类型的秩。这意味着当编译器需要确定表达式的类型时,它会将操作数转换为级别较高的操作数的类型。如果操作数具有相同的秩,但一个操作数具有无符号整数类型,而其他操作数具有有符号整数类型,则公共类型是无符号int类型。
因此,在if语句的条件下
if ( sizeof(int) > -1)-1被转换为无符号整数类型的size_t,并且由于它的内部表示(所有位都被设置为1)比sizeof( int )的值更自由。
https://stackoverflow.com/questions/31957514
复制相似问题