void main(){if(sizeof(int)> -1)printf(“true”); else printf(“false”); ;

void main() { if(sizeof(int) > -1) printf("true"); else printf("false"); } 

我期望输出是真实的,但这是错误的。 任何人都可以解释我输出的原因。

sizeof(int)的types是size_t ,它是一个无符号整数types。 所以在expression式if(sizeof(int) > -1)-1被转换为一个非常大的无符号整数。

顺便说一下,使用int main而不是非标准的void main

sizeof(int)返回size_t,它与unsigned int

通常的算术转换是隐式执行的通用types。

 int --> unsigned int --> long --> unsigned long --> long long --> unsigned long long --> float --> double --> long double 

作为隐式转换的一部分, int值(-1)被转换为unsigned int

16 bit machine(for example)16 bit machine(for example) -1将被表示为0xFFFF

所以expression成为,

 if(sizeof(int) > -1 ) ==> if(2 > 0xFFFF) 

并打印false 。 我build议尝试if((int)sizeof(int) > -1 )得到正确的结果。

sizeof提供的值的数据types是size_t ,它是(在大多数机器中)一个unsigned int/long ,因此,当你将它与-1进行比较时, -1被升级为unsigned ,然后变成0xFFF.. ,这就是数据types可容纳的最大值,因此您的比较失败。