在一个表达式中,可以含有多个逻辑运算符,他们的优先级是:“!”最高“&&”次之“||”最低;逻辑运算低于所有关系运算,而“!”高于所有算术运算。
第一个例子
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int a = 3;
int b = 4;
int c = 5;
int d = 6;
(a > b) && (c > d);
a > b&& c > d;
}
这两个式子的值一样,都是为0;因为逻辑运算低于所有关系运算,()可以不加。
第二个例子
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int a = 0;
int b = 4;
int c = 0;
int d = 6;
int e = (a || b) && (c || d);
int f = a || b && c || d;
printf("e=%d,f=%d",e,f);
}
这个式子尽管他们的答案一样,但是他们所表达的意思不一样,第一个式子优先算括号里面的,而第二个式子先算b&&c他们的结果是0;再计算a||0,其结果也是0,最后算0||d,答案也是1。
第三个例子
int a = 0;
int b = 4;
int c = 0;
int d = 6;
!a || a > b;
这个式子结果为1,首先是判断!a,其结果为1,再判断a>b其结果为0,然后就是||,得到答案1。
第四个例子
int main() {
int a = 3;
int b = 4;
int c = 0;
int d = 6;
int e = a >= 10 && b && c++;
int f = a >= 10 || b || c++;
printf("e=%d,f=%d",e,f);
}
第四个例子有两个问题1.关于e,f的值以及c的值有没有变化。
首先因为关系运算大于逻辑运算,所以先是判断a>=10,又因为C语言规定若&&前面的值为0,则后面的操作不进行,虽然c++的优先级最高,但是a>=10的值为0,所以c++不进行运算,c的值不改变。e的值为0,c不改变。
f的值为1,首先是进行c++运算他的值为1,再||中只要一边为1,就确定了整个式子为1。c的值改变了,它的值为1。
第五个例子
int main() {
int a = 3;
int b = 4;
int c = 0;
int e = ++a || b && ++c;
printf("e=%d,c=%d,a=%d",e,c,a);
}
第五个例子也是判断式子的值以及c的值有没有改变;
第五个式子其实与第四个一样,首先++a其值为1,||之后的操作就不再进行,式子的值为1,c的值没有改变。
标签:逻辑,优先级,运算,int,c++,运算符,例子,&&,式子 From: https://blog.51cto.com/u_16002169/6149646