为什么它将输出作为'再见'?请讨论

时间:2018-06-05 04:27:47

标签: c if-statement sizeof

请说明输出的原因......为什么它在条件if语句为真时给'bye',因为int的大小是2或4字节。

   #include<stdio.h>
        #include<conio.h>
        int main()
        {
        if(sizeof(int)>-1)
            printf("hi");
        else
            printf("bye");
        return 0;
        }

2 个答案:

答案 0 :(得分:2)

请参阅http://en.cppreference.com/w/c/language/sizeof

  

两个版本都返回size_t类型的值。

请参阅size_t,http://en.cppreference.com/w/c/types/size_t
这表明它是未签名的。

如果因此比较有效地具有高正值,则 那么逻辑表达式基本上总是假的。

如果你能帮助编译器理解你真正想做的事情,那么 例如改为

((int)sizeof(int))>-1
事情是不同的。

答案 1 :(得分:2)

这是因为sizeof()的返回类型为size_tsizeof()从不以负字节为单位给出大小。

sizeof(int)结果的类型为unsigned

在这里 if(sizeof(int)>-1) 比较发生在不同类型之间,即signed(-1)unsigned。因此内部编译器将执行隐式类型转换,即signed转换为无符号 -1 等效无符号值全部为4294967295

所以现在条件看起来像 if(4 > 4294967295) 哪个是假的,所以打印bye

请参阅此sizeof()返回类型http://en.cppreference.com/w/c/types/size_t