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可容纳的最大值,因此您的比较失败。