逻辑运算符、表达式和条件语句(布尔值)

Logical Operators, Expressions & Condition Statements (boolean values)

所以我要复习 C 编程中的一些内容,我之前已经复习过。

但是,我很难回忆起一些再次变得相关的事情。我开始编写更复杂的程序,这些程序使用越来越多的条件语句,但我无法完全理解它们。

总而言之,我知道在 C 语言中,逻辑运算符以真或假两种方式之一确定条件的值。这实际上等于 1 或 0。

以下面的表达式为例: (如果 x4y5z is 3

x > z && y > z

插入值...

4 > 3 && 5 > 3

所以就布尔逻辑而言... 我知道这句话的价值实际上是: 1 && 1 即 1(真)

或者... (与上面声明的变量值相同)

z >= x && x <= y

这条语句的实际价值是: 0 && 1 为 0(由于逻辑 && 而为假)

这就是我需要帮助的地方...

我不记得如何用几种不同的表达形式来等同事物,例如: 新值:x = 3y = 0z = -3)

x && y || z

这样的布尔值是多少?没有像 <>==!=?

这样的运算符

会不会是...

x && y || z
1    0    1 

哪个是 1 为真?因为 x && y 变成了假(因为任何带有 && 的假都是假的)但是它后面跟着 || (或),如果是真的,它就是真的?

我的问题有道理吗?

或者看起来像这样的表达式呢... (if x = 5, y = 1)

!x + !!y

这里的布尔值是多少?是吗

!(5) + !(!)(1)
  0      1  which would be 1 true? 

我要加零和一吗?应该不是。

我可能想多了。

我们知道 (cppreference conversion):

  • 零值计算为假。
  • 非零值计算结果为真。任何非零值。 -3 是真的。 1 是真的。 INT_MAX 是真的。

我们也知道 operator precedence:

  • && 的优先级高于 ||
  • 这意味着,首先评估 &&,然后评估 ||

我们也知道C语言中的truefalse只是stdbool.h, so they have the int type. C does not has "real" boolean values, only boolean _Bool type. The logical operators && || and ! evaluate to int(!) type values 1 or 0 only, see cppreference.

中定义的10的宏

所以:

3 && 0 || -3

等于:

(true && false) || true

计算结果为 1

!5 + !!1

! 具有更高的优先级。

如果为零,! 运算符的值是 1(真)。在非零表达式的情况下,! 运算符的值为 0(假)。

所以是:

(! true) + (! (! true) )

false + true

0 + 1

1