9

[好像很奇怪这个不存在,所以如果它是重复的,请提前道歉]

我想测试 C 中的逻辑相等性。换句话说,我想知道如果两个值都以与逻辑表达式相关的正常方式进行转换,两个值是否相等。

在 C99 中,我认为

(bool)a == (bool)b

给我想要的。那是对的吗?用传统 C 写这个的正常方法是什么?

4

4 回答 4

11

您通常会看到:

if ((a == 0) == (b == 0))

或者

if (!!a == !!b)

!!a如果 a 为非零,则为 1,否则为 0 。

希望这可以帮助!

于 2012-06-08T16:37:08.387 回答
6

在 C 中,零是错误的。如果您想将任何值转换为其等效的布尔值,标准方法(嗯,除了几乎不需要它)是在表达式!!前面加上!!a. 在你的表达的情况下, !!a == !!b 可以简化为 !a == !b

于 2012-06-08T16:40:02.753 回答
2

在 C99 之前的 C 中,“转换为 bool”的传统惯用方式是使用!!.

于 2012-06-08T16:43:57.193 回答
1

传统的c中没有(bool)。True/False 使用ints 处理。您可以检查布尔相等性

a ? b : !b
于 2012-06-08T16:39:14.517 回答