[这似乎很奇怪,这不存在,所以如果它是重复的话,请提前道歉]
我想测试C中的逻辑相等性。换句话说,我想知道如果两个值都以与逻辑表达式相关的正常方式转换,两个值是否相等。
在C99中,我认为
(bool)a == (bool)b
给出我想要的东西。那是对的吗?在传统的C中写这个的正常方法是什么?
答案 0 :(得分:10)
您通常会看到:
if ((a == 0) == (b == 0))
或者
if (!!a == !!b)
如果a为非零,则!!a
的计算结果为1,否则为0。
希望这有帮助!
答案 1 :(得分:6)
在C中,零为假。如果你想将任何值转换为它的布尔等价物,那么标准方式(除了几乎不需要它之外)就是在!!
前面添加一个表达式,如!!a
中所示。在你的表达的情况下,
!!a == !!b
可以简化为
!a == !b
答案 2 :(得分:2)
在C99之前的C版中,“施放到布尔”的传统惯用方式是!!
。
答案 3 :(得分:1)
传统c中没有(bool)
。使用int
处理True / False。您可以使用
a ? b : !b