本文 我们来说 逻辑运算符
有时做出决策需要测试多个条件,C语言提供了用于将简单条件组合成复杂条件的逻辑运算符。
逻辑运算符
如下图
用逻辑运算符连接操作数组成的表达式称为逻辑表达式。
逻辑运算的结果只有0和1
逻辑运算的对象可以是任意数值型,但编译器将所有非0值都视为:真(1)。
觉得举个例子
我们编写代码如下
#include <stdio.h>
int main() {
if (4&&5) {
printf("条件成立");
}
return 0;
}
运行结果如下
这里 我们if中 写的 是 4且5 它们并不产生逻辑判断关系 但 表达式 将 4 读成了 非0 就为1 后面的5也同理被读成了 1
两个值都是 1 条件真 自然 if就成立 执行了
逻辑 或 运算符的特点
它需要 || 的左右条件都不成立时 总条件才为 假 只要其中任何一个条件成立 返回的条件就是真
例如 我们这样写
#include <stdio.h>
int main() {
if ((1 == 5) || (1 == 1)) {
printf("条件成立了");
}
return 0;
}
我们 第一条件 1 等等于 5 显然会返回0 条件不成立(假) 而 第二个 1 等等于 1 显然是成立的 条件返回真
运行结果如下
因为我们用的是 或运算符 所以 只要有一个成立 总条件就是真
而且不止两个
我们可以
#include <stdio.h>
int main() {
if ((1 == 5) || (1 == 1) || (1 == 7) || (1 == 8)) {
printf("条件成立了");
}
return 0;
}
运行之后 依旧是 某一个成立 整个条件全部成立
但如果条件全部不成立 例如
#include <stdio.h>
int main() {
if ((1 == 7) || (1 == 8)) {
printf("条件成立了");
}
return 0;
}
自然就是啥都没有啦
然后 逻辑 非 !
意思就是取反
例如 我们这样
#include <stdio.h>
int main() {
if (!(1 == 7)) {
printf("条件成立了");
}
return 0;
}
1 显然 无法等等于 7 所以 感叹号后面的条件是无法成立的
但非符号取反 我们运行
条件就成立了
意思 就是反过来 然后 我们这样写
#include <stdio.h>
int main() {
if (!(1 == 1)) {
printf("条件成立了");
}
return 0;
}
我们 1 等等于 1 显然 成立
我们运行代码 取反
条件就不成立了
最后 且 && 就是 所有的条件都必须成立 总条件才会成立 否则 整个条件返回的就是 条件 0(假)
我们这样写
#include <stdio.h>
int main() {
if ((1 == 1)&&(2 == 2) && (3 == 3)) {
printf("条件成立了");
}
return 0;
}
显然 我们全部条件都是成立的
运行代码
我们这里 稍稍改一下 将 最后一个3改成4 如下图
运行代码
因为 其中包含不成立的条件 因此 整个表达式是结果就是 0 (假)
运算符 非的优先级最高 然后 且的优先级高于或
常见运算符 优先级如下
记不住这些优先级:使用 小括号会帮助达到更清晰的表示运算次序关系。