逻辑运算是对逻辑量进行的运算,结果只有0或者1.
逻辑量为关系运算或逻辑运算的结果。
具体的逻辑量我们来看下面的这个表格:
运算符 | 描述 | 示例 | 结果 |
! | 逻辑非 | !a | 如果a是true就是false 如果b是false就是true |
&& | 逻辑与 | a&&b | 如果a和b都是ture,结果为ture,否则就是faluse |
|| | 逻辑或 | a||b | 如果a和b有一个是true,结果为true,两个都是faluse,结果为faluse |
这里需要注意的一点就是,当我们表示一个数字在(4,6)之间的时候,不能使用我们数学上的方法:4<x<6,由于前面的4<x这里就是一个逻辑语句,它的结果是一个逻辑值:0或1.
而正确的式子是这个样子的:
x>4&&x<6;
当我们判断一个字符C是否为大写字母的时候,可以使用和上面一样的代码:
c>='A'&&c<='Z'
我们在下面的代码中具体用例子来进行以上的所有的逻辑量的使用的方法:
age>20&&age<30;//大于20小于30。
index<0||index>99;//小于0或者大于99.
!age<20;//先计算前面的!age,变成非age,如果age 为0的话结果就是1,如果age是 1的话,结果就是0.
这块的优先级比较乱,我们具体来分析一下:
这里有一个总优先级的集合,我们用一张大表来进行优先级的判断:
优先级 | 运算符 | 结合性 |
1 | () | 从左到右 |
2 | !+-++-- | 从右到左(单目的+和-) |
3 | */% | 从左到右 |
4 | +- | 从左到右 |
5 | < <= > >= | 从左到右 |
6 | == != | 从左到右 |
7 | && | 从左到右 |
8 | || | 从左到右 |
9 | = += -= *= /= %= | 从右到左 |
这边有一个比较重要的点就是短路:
逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果的话,就不会做右边的运算,具体来看下面的代码:
a==6&&b==1;//这块就是,如果最左边的a==6不成立的话,那右边的b==1就不再进行运算了。
a==6&&b+=1;//和上面的语句同理,这但是这里的b的那个语句有赋值的符号,但是左边的语句如果不成立的话,右边的语句就不会进行赋值加一。
这个也就相当于||如果左边是ture的话就不再运行右边的程序了。
我们在具体的程序中来实施这个特殊的选择方式:
#include<stdio.h>
int main()
{
int a = -1;
if (a > 0 && a++ > 1)
{
printf("OK");
}
printf("%d\n", a);
return 0;
}

最后的结果为-1,则说明a++没有被执行。
所以最后的忠告是:不要在表达式中加复合赋值语句。