什么是C代码的输出?我需要解释

时间:2015-04-23 10:03:25

标签: c

FavoriteRecipe

执行后,我认为它为假。是什么原因?

2 个答案:

答案 0 :(得分:11)

因为

~0 == 0xffffffff  (the ~ operator inverts all bits)

(unsigned int)-1 == 0xffffffff

as

(0xffffffff == 0xffffffff) == 1

你的表达归结为

boolean[1]

导致

"FALSE"

答案 1 :(得分:2)

这是一种精神伎俩。

(unsigned int)-1 == ~0
0xffffffff == 0xffffffff
1

boolean[1]指向FALSE,因此输出正确。

但在您看来,条件会扩展为true,那么为什么输出FALSE

答案:boolean[]数组中元素的排序是错误的,或者至少不是给出预期结果的顺序。

这就是

#define TRUE 0
#define FALSE 1

然后想知道为什么C编译器"忽略" "新规则"因为真值和代码突然变得越来越麻烦和错综复杂。