文章目录
这篇文章可能随时更新, 各位可以在评论区提一些内容, 然后我会认真考虑加入到这里.
逻辑运算符和位运算符
三大逻辑"与, 或, 非"和对应的离散数学符号 ∧ , ∨ , ¬ \land,\vee,\lnot ∧,∨,¬在命题中十分常见.
在计算机中, 针对命题的逻辑运算符多半是因为离散数学的运算符不能直接打出来而设计的四种符号. & | ! ~
对于二进制数据运算也有按位与或非操作. 所以C语言规定除了非操作以外, 逻辑运算采用成对符号, 按位运算采用单个符号.
下表说明了符号和对应含义:
符号 | 对应数学符号 | 含义 |
---|---|---|
& | 对某两个数据按二进制位进行"与"操作 | |
| | 对某两个数据按二进制位进行"或" 操作 | |
~ | 对某个数据按二进制位取反操作 | |
&& | ∧ \land ∧ | 对某两个命题做"与" 操作 |
|| | ∨ \lor ∨ | 对某两个命题做"或" 操作 |
! | ¬ \lnot ¬ | 对某个命题做 “否定” 操作 |
请看下面的程序.
1 # include <stdio.h>
2
3 int main (void){
4
5 int a = 3;
6
7 if(a>5 || 3>2){
8 printf("满足条件\n");
9 }
10
11
12 return 0;
13
14 }
15
程序中, if
语句括号里的条件表达式是两个命题"析取"(或) 的结果. 明显 第一个条件不满足, 但是第二个条件满足, 所以printf
操作会被执行.
接下来是且(合取)运算符的操作. 这个在判断数值范围的时候很有用而且很重要.
比如我想判断
3
<
x
<
5
3<x<5
3<x<5 是否成立, 这个连续的表达式不能直接交给C语言, C语言会优先判断
3
<
x
3<x
3<x是否成立, 然后判断这个结果(1或0)是否小于5. 也就是说无论是否满足
3
<
x
<
5
3<x<5
3<x<5, C 语言都会直接认为这个表达式为真.
请看下面的程序
# include <stdio.h>
int main (void){
int x = 2;
if(3<x<5){
printf("成立\n");
}
return 0;
}
程序运行结果如下
如果确实需要判断范围, 则需要对这个表达式修改一下. 将它拆开, 分为左边和右边:
# include <stdio.h>
int main (void){
int x = 2;
if(3<x && x<5){
printf("成立\n");
}
return 0;
}
这样程序运行就会和人类理解一致:
这里程序没有任何输出, 代表 if
里面的内容没有执行.