为什么C语言中sizeof(int) > -1的判断结果为False?
问题原因解析
首先附上问题中的代码:
#include <stdio.h> main() { if (sizeof(int) > -1) printf("True"); else printf("False"); }
出现该输出的核心原因是C语言的整数隐式转换规则:
sizeof运算符的返回值类型是size_t,这是C标准定义的无符号整数类型- 当无符号整数和有符号整数做比较运算时,C语言会默认把有符号整数转换为同宽度的无符号整数后再执行比较
- 在int占4字节的运行环境下,
-1作为有符号int转换为无符号int后的值为4294967295(即2的32次方减1) - 程序实际执行的比较逻辑为
4 > 4294967295,结果为假,因此输出False
如果需要得到符合直觉的True结果,可以主动把sizeof的返回值强制转换为有符号整数,将判断条件修改为if ((int)sizeof(int) > -1)即可。
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

