请说明输出的原因......为什么它在条件if语句为真时给'bye',因为int的大小是2或4字节。
#include<stdio.h>
#include<conio.h>
int main()
{
if(sizeof(int)>-1)
printf("hi");
else
printf("bye");
return 0;
}
答案 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_t
而sizeof()
从不以负字节为单位给出大小。
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