void main()
{
    if(sizeof(int) > -1)
        printf("true");
    else
        printf("false");    
}
我期望输出为真,但它是错误的.任何人都可以解释一下输出的原因.
sizeof(int)是类型size_t,是无符号整数类型.所以在表达式中if(sizeof(int) > -1),-1转换为无符号整数,这是非常大的.
顺便说一句,使用int main而不是非标准void main.
sizeof(int)返回size_t,即as unsigned int.
通常的算术转换是针对常见类型隐式执行的.
int --> unsigned int --> long --> unsigned long --> long long --> unsigned long long --> float --> double --> long double
intvalue(-1)将转换unsigned int为隐式转换的一部分.   
-1将被表示为0xFFFF在16 bit machine(for example).
所以表达成为,
if(sizeof(int) > -1 ) ==> if(2 > 0xFFFF)
并false打印.我建议尝试if((int)sizeof(int) > -1 )适当的结果.
| 归档时间: | 
 | 
| 查看次数: | 3989 次 | 
| 最近记录: |