ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 【知识精讲】是非之间的逻辑组合 ## Part1 之前,我们学习了是、非(真、假)的表示——1、0,还学习了取反符号`!`,知道了 0 的取反结果是 1,1 的取反结果是 0。我们也学习了关系运算的逻辑值的判断。 你可以回忆一下,对于“3>5”、“−1>1”、“2>−2”和“6>1”这些关系运算他们的逻辑值是怎样的。 ## Part2 你应该得到了结果 * “3>5”为假,取 0; * “−1>1”为假,取 0; * “2>−2”为真,取 1; * “6>1”为真,取 1; 那么,如果我们把它们两两组合在一起,得到诸如 “3>5 且 −1>1”、“3>5或2>−2”这样的表述;在 C++ 语言中,我们可以用`&&`表示“且”,用`||`表示“或”。这样,“3>5 且 −1>1”在程序中可以被表示为`3 > 5 && -1 > 1`的形式,“3>5 或 2>−2”在程序中则可以被表示为`3 > 5 || 2 > -2`的形式。 这种组合的逻辑值会是什么呢? ## Part3 其实这种且`&&`、或`||`和我们在逻辑上的且、或都是一致的,我们可以根据且、或关系两侧的值判断他们在一起后的逻辑组合的取值。具体的取值,请参考下面的这个真值表(我们在数理逻辑中学过): | p | q | p 且 q | p 或 q | | --- | --- | --- | --- | | 0 | 0 | 0 | 0 | | 0 | 1 | 0 | 1 | | 1 | 0 | 0 | 1 | | 1 | 1 | 1 | 1 | ## Part4 除了与、或,我们还有一种常见的逻辑组合“异或”,在 C++ 语言中用 `^` 作为这种逻辑运算的运算符。这种运算的真值表如下(建议配合学习《离散结构》课程中的《数理逻辑》一章): | p | q | p 异或 q | | --- | --- | --- | | 0 | 0 | 0 | | 0 | 1 | 1 | | 1 | 0 | 1 | | 1 | 1 | 0 | ## Part5 请注意, `&&` 的结合优先级是高于 `||` 的。也就是说 ~~~ m == 4 || m == 6 || m == 9 && d < 30 ~~~ 会被理解成 ~~~ m == 4 || m == 6 || (m == 9 && d < 30) ~~~ 如果我们希望表示 `m` 是 4 或 6 或 9 的前提下,同时 `d` 小于 30。我们则需要添加括号改变逻辑组合的顺序: ~~~ (m == 4 || m == 6 || m == 9) && d < 30 ~~~