嵌入式技术
| 运算符 | 名称 | 示例 | 描述 |
|---|---|---|---|
| && | 与 | a && b | 当a和b都为真时,返回真 |
| 或 | |||
| ! | 非 | !a | 如果a的条件为真,返回假 |
a && b
a || b
!a
数值
5 && 3
20 || a
!0
表达式
a+b && c
a-b || c-a
!(a+c)
逻辑运算符的运算结果为0(假)或者1(真)
真,条件不成立结果则为 假。#include < stdio.h >
int main() {
printf("1 && 2 结果为%dn", 1 && 2);
printf("0 && 3 结果为%dn", 0 && 3);
printf("5 && 0 结果为%dn", 5 && 0);
printf("0 && 0 结果为%dn", 0 && 0);
return 0;
}

#include < stdio.h >
int main() {
printf("1 || 2 结果为%dn", 1 || 2);
printf("0 || 3 结果为%dn", 0 || 3);
printf("5 || 0 结果为%dn", 5 || 0);
printf("0 || 0 结果为%dn", 0 || 0);
return 0;
}

#include < stdio.h >
int main() {
printf("!2 结果为%dn", !2);
printf("!0 结果为%dn", !0);
return 0;
}

!! ,将任何值转换为布尔值
!!可以将一个整数、字符或指针值转换为一个布尔值。例如,下面的代码片段中,将字符串转换为布尔值,并将其用于条件判断:
#include < stdio.h >
int main()
{
char *str = "hello";
int bool_value = !!str;
if(bool_value)
{
printf("str is not nulln");
}
else
{
printf("str is nulln");
}
return 0;
}

由于hello是一个非空字符串,所以!!将其转换为1,if条件语句的条件将被认为是真,所以第一个printf语句将被执行。
反之,如果字符串“str”为NULL,则!!将其转换为0,if条件将被认为是假,第二个printf语句将被执行。
#include < stdio.h >
int main() {
int a = !( (6 > 3) && (11 - 20) && (0 - 1) );
int b = !( (5 + 4) && (7 - 8) && (3 < 2) );
printf("a = %dn", a);
printf("b = %dn", b);
return 0;
}

第一个嵌套表达式分析
6 > 3的结果为1,11 - 20的结果为-9,所以(6 > 3) && (11 - 20) && (0 - 1)等价于1 && -1,结果为1!(1),结果为0第二个嵌套表达式分析
5 + 4的结果为1,7 - 8的结果为-13 < 2的结果为0(5 + 4) && (7 - 8) && (3 < 2)等价于9 && 0,结果为0!(0),结果为1#include < stdio.h >
int main() {
int a = !( 1 || -1 && 0 );
printf("a = %dn", a);
return 0;
}

&& 的优先级高于||,所以-1 && 0会被先运算,结果为01 || -1 && 0等价于1 || 0,结果为1!(1),结果为0逻辑运算符的优先级顺序为 ∣∣ < && < !
有兴趣的小伙伴可以参考上面的代码来验证&&和!的优先级关系哦!
通过本文的讲解,我们学会了3种逻辑运算符的使用方法及优先级关系,下一篇文章,我们将讲解位运算符。
全部0条评论
快来发表一下你的评论吧 !