[英]What is the output of thic C code? I need explaination
int main()
{
char boolean[][6]={"TRUE","FALSE"};
printf("%s",boolean[(unsigned int)-1 == ~0]);
}
执行后,我将其设为FALSE。 是什么原因?
因为
~0 == 0xffffffff (the ~ operator inverts all bits)
和
(unsigned int)-1 == 0xffffffff
如
(0xffffffff == 0xffffffff) == 1
你的表情归结为
boolean[1]
导致
"FALSE"
这是一个心理把戏。
(unsigned int)-1 == ~0
0xffffffff == 0xffffffff
1
和boolean[1]
指向FALSE
,因此输出正确。
但是在您看来,条件会扩展为true
那么为什么输出FALSE
?
答: boolean[]
数组中元素的顺序是错误的,或者至少不是给出预期结果应该是的顺序。
这是沿着
#define TRUE 0
#define FALSE 1
然后想知道为什么C编译器会“忽略”真值和代码的“新规则”而突然变成错误的和令人费解的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.