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

时间:2019-03-08 00:09:42

标签: c conditional logical-operators boolean-logic

所以我要讲的是C编程中的一些内容,这是我以前讨论过的。

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

总而言之,我知道在C语言中,逻辑运算符可以通过两种方法之一来确定条件的值,即true或false。真正等于1或0。

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

x > z && y > z

插入值...

4 > 3 && 5 > 3

所以就布尔逻辑而言... 我知道该语句的值实际上是: 1 && 1为1(真)

或... (具有与上述声明相同的变量值)

z >= x && x <= y

此语句的值实际上是: 0 && 1为0(由于逻辑&&,为false)

所以这是我需要帮助的地方...

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

x && y || z

像这样的布尔值是什么?是否没有<>==!=之类的运算符?

会不会...

x && y || z
1    0    1 

1为真吗?因为x && y变为假(因为&&的任何假为假),但是之后跟着||(或),如果为true,则为true?

我的问题有意义吗?

或者像这样的表达式呢... (如果为x = 5y = 1

!x + !!y

这里的布尔值是什么?是

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

我是否将零和一相加?可能不是。

我可能对此太想了。

1 个答案:

答案 0 :(得分:2)

我们知道(cppreference conversion):

  • 零值的计算结果为false。
  • 非零值计算为true。任何非零值。 -3是正确的。 1是正确的。 INT_MAX是正确的。

我们也了解operator precedence

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

我们还知道C中的truefalse只是stdbool.h中定义的10的宏,因此它们有{{1 }}类型。 C没有“真实的”布尔值,只有布尔int类型。逻辑运算符_Bool &&||的求值方式为!(!)类型值int1,请参见cppreference

所以:

0

等于:

3 && 0 || -3

其值为(true && false) || true

1

!5 + !!1 的优先级更高。

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

就是这样:

0