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

Ven*_*kat 0 c

void main()
{
    if(sizeof(int) > -1)
        printf("true");
    else
        printf("false");    
}
Run Code Online (Sandbox Code Playgroud)

我期望输出为真,但它是错误的.任何人都可以解释一下输出的原因.

Yu *_*Hao 9

sizeof(int)是类型size_t,是无符号整数类型.所以在表达式中if(sizeof(int) > -1),-1转换为无符号整数,这是非常大的.

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


Jey*_*ram 6

sizeof(int)返回size_t,即as unsigned int.

通常的算术转换是针对常见类型隐式执行的.

int --> unsigned int --> long --> unsigned long --> long long --> unsigned long long --> float --> double --> long double
Run Code Online (Sandbox Code Playgroud)

intvalue(-1)将转换unsigned int为隐式转换的一部分.

-1将被表示为0xFFFF16 bit machine(for example).

所以表达成为,

if(sizeof(int) > -1 ) ==> if(2 > 0xFFFF)
Run Code Online (Sandbox Code Playgroud)

false打印.我建议尝试if((int)sizeof(int) > -1 )适当的结果.