thic代码的输出是什么?我需要解释一下

thic代码的输出是什么?我需要解释一下,c,C,执行之后,我得到的结果是FALSE。原因是什么?因为 int main() { char boolean[][6]={"TRUE","FALSE"}; printf("%s",boolean[(unsigned int)-1 == ~0]); } 及 作为 你的表情可以归结为 (0xffffffff == 0xffffffff) == 1 导致 boolean[1] 因为 int main() { char boolean[][6]={"TRUE","FALSE

执行之后,我得到的结果是FALSE。原因是什么?

因为

int main() 
{
    char boolean[][6]={"TRUE","FALSE"};
    printf("%s",boolean[(unsigned int)-1 == ~0]);
}

作为

你的表情可以归结为

(0xffffffff == 0xffffffff) == 1
导致

boolean[1]
因为

int main() 
{
    char boolean[][6]={"TRUE","FALSE"};
    printf("%s",boolean[(unsigned int)-1 == ~0]);
}

作为

你的表情可以归结为

(0xffffffff == 0xffffffff) == 1
导致

boolean[1]

这是一种心理骗局

"FALSE"
布尔值[1]指向FALSE,因此输出是正确的

但在你看来,条件扩展为真,那么为什么输出为假呢

答:布尔[]数组中元素的顺序是错误的,或者至少不是给出预期结果所应该的顺序

这是按照

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

然后想知道为什么C编译器忽略了真值的新规则,代码突然变得错误和复杂。

这是一个心理上的把戏

"FALSE"
布尔值[1]指向FALSE,因此输出是正确的

但在你看来,条件扩展为真,那么为什么输出为假呢

答:布尔[]数组中元素的顺序是错误的,或者至少不是给出预期结果所应该的顺序

这是按照

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

然后想知道为什么C编译器忽略了真值的新规则,代码突然变得错误和复杂。

FALSE唯一有效的定义是define FALSE'-'-'-'-'。当然,可以安全地定义TRUE定义TRUE“+”+“+”+”,这会立即结束将条件与TRUE进行比较的坏习惯。FALSE的唯一有效定义是define FALSE“--”。当然,可以安全地定义TRUE定义TRUE“+”+“+”+”,这会立即结束将条件与TRUE进行比较的坏习惯。您应该询问编写此代码的人,为什么他们会将TRUE放在索引0,将FALSE放在索引1。因为它和定义TRUE 0一样没有意义。您应该询问编写此代码的人,为什么他们会将TRUE放在索引0,将FALSE放在索引1。因为它和定义真0一样没有意义。