首页 > 其他分享 >逻辑运算符的优先级老是忘?只因你没想明白它的逻辑!

逻辑运算符的优先级老是忘?只因你没想明白它的逻辑!

时间:2025-01-21 18:56:49浏览次数:3  
标签:逻辑 优先级 有钱 找对象 运算符 &&

逻辑运算符的优先级老是忘?只因你没想明白它的逻辑!


大多部编程语言中,逻辑运算符的优先级都会设置成! > > > && > > >||,你有没有想过,这是为什么呢?

一、优先逻辑分析

1.1 为什么逻辑与比逻辑或优先级高

这是因为在逻辑运算中,通常希望先执行更“限制性”的运算。
所谓的“限制性”,就是自由度小,限制多。
在这里插入图片描述

这种先执行更“限制性”的运算其实是与人的生活习惯相一致的。
因为更强的限制代表着更严格和精确的要求,通常是人们经过深入思考过的、比较紧要的,因此应该优先考虑。
逻辑与要求两个操作数都为真时才返回真,而逻辑或只需要其中一个操作数为真就返回真。这说明逻辑与比较“严格”,而逻辑或则比较“宽松”,所以逻辑与的优先级应比逻辑或高。
举个例子就明白了,比如一个妹子要找对象,她的择偶标准有三个条件:a-善良,b-帅,c-有钱。
表达式1:(a&&b)||c
它的意思是说:如果心地善良,并且长得帅,就是我的菜,如果实在不行有钱有行啊!
相比有钱,善良并且帅显然是经过更深入思考的,是限制性更强的条件,因此也是我们相对来说更看重的。虽然它和有钱是或的关系,但在妹子的内心深处,有钱只是退而求其次的选择。即便她选择了后者,只不过是屈从了现实而不是内心所愿。
换个角度说,这里其实表达的是择偶的两种标准,一种是善良并且帅,一种是有钱。善良并且帅本身就是一种标准中的内部条件,理应优先计算。
表达式2:a&&(b||c)
它的意思是说:心地善良是前提,这是必须的。然后嘛,怎么也得帅点儿吧,如果不帅有钱也行啊。
你看,即便把括号放在后面,她先看的还是前面的“与”。
即便你写成(b||c) && a,相当于说:要么帅要么有钱,两者至少有一样,此外必须要心地善良。
请问她优先考虑的点变了吗?
这就是“逻辑与”比“逻辑或”优先级高的现实依据。

1.2 为什么逻辑非优先级最高

这是因为它是个一元运算符,即对单个操作数进行运算的运算符。在逻辑运算中,一元运算符通常具有比二元运算符更高的优先级。
其实这一点也符合生活习惯。还是拿找对象举例,比如一大叔对大伙说他家闰女找对象的条件,有两种说法:
①俺闰女找对象要求:不矮、不丑、不傻、不穷。
②俺闰女找对象要求:矮、丑、傻、穷,这些都不行。
请问哪种说法更符合人们的日常表达习惯呢?

二、符号的象形解释

逻辑非的符号是!,一个感叹号,表达的感情最强烈。就像干柴烈火的热恋男女一样,一刻也等不了,必须首先让它满足。
逻辑与的符号是&&,长得像连接人与人的红飘带,因此它的连接关系也是比较紧密的。
在这里插入图片描述

逻辑或的符号是||,长得就像一堵墙,是把东西隔离开来的。正所谓“墙里秋千墙外道,墙外行人,墙里佳人笑”。因此它的关系是最不紧密的,故此应该最后考虑。
在这里插入图片描述

如果你无论无何也想不起来逻辑运算符的优先级,还有一个办法,就是自己写个代码测试一下,比如:

#include<stdio.h>
int main(){
    //&&与||的优先级比较
    printf("%d %d %d\n", 0&&1||1, (0&&1)||1, 0&&(1||1));
    printf("%d %d %d\n", 1||1&&0, (1||1)&&0, 1||(1&&0));

    //||与!的优先级比较
    printf("%d %d %d\n", !1||1, (!1)||1, !(1||1));

    //&&与!的优先级比较
    printf("%d %d %d\n", !1&&0, (!1)&&0, !(1&&0));
    return 0;
}

通过看每行第1个表达式的输出结果与后面哪个表达式相同,即可简单判断出他们的优先级。更多内容详见:《1秒写出逻辑运算符的优先级判定表达式》

标签:逻辑,优先级,有钱,找对象,运算符,&&
From: https://blog.csdn.net/jjmhx/article/details/145284735

相关文章

  • java业务逻辑判断
       在平时的业务开发中,空指针出现的频率是比较高的bug,在出现空指针的时候,很多小伙伴都是习惯性地加!=null的判断,这个bug就能解决。当代码中频繁出现!=null的判断时,我们就会很头疼,能不能高效、优雅地做这个判断?答案当然是可以的。1.在做!=null的判断时,请停顿一下,......
  • C#表达式和运算符
    本文我们将学习C#的两个重要知识点:表达式和运算符。本章内容会理论性稍微强些,我们会尽量多举例进行说明。建议大家边阅读边思考,如果还能边实践就更好了。1.表达式说到表达式,大家可能感觉有些陌生,我们先来举个例子。在前面章节的示例代码中,大家一定见过类似这样的代码:i++,它其......
  • Web安全测试学习手册-业务逻辑测试
    首先感谢朋友倾璇的邀请,参与了的相关撰写,目前负责业务逻辑测试这一块的撰写,目前初步已经成型,先发出来让大家看看,欢迎点评,也可以加入我们一起来撰写~业务逻辑测试介绍:这里对Web应用业务逻辑方面的安全缺陷进行介绍和常见案例讲解。任意用户密码重置常见的缺陷*1.验证码类缺......
  • Java类加载机制与JVM运行时数据区各逻辑内存区域与JDK的版本相关差异浅谈
    Java类加载机制与JVM运行时数据区各逻辑内存区域与JDK的版本相关差异浅谈 【摘要】JVM(JavaVirtualMachine)作为Java研发人员工作的每天都会接触到的虚拟机,其运行机制与底层原理想必大家都略知一二,今天我将从初学者的角度出发,结合甲骨文官方的技术文档,对部分Java虚拟机的相关......
  • Linux常用命令-LVM逻辑卷管理
    Extend扩展vgextendlvextendReduce减少vgreducelvreduce1、PV物理卷管理1.1)、pvscan命令pvscan用于扫描系统中的所有物理卷,并输出相关信息。  1.2)、pvcreate命令pvcreate用于将分区或整个硬盘转换成物理卷,主要是添加LVM属性信息并划分PE存储单位。该命令需要使用硬盘......
  • 第11篇:从入门到精通:掌握python特殊方法与运算符重载
    第11篇:特殊方法与运算符重载内容简介本篇文章将深入探讨Python中的特殊方法(魔术方法)与运算符重载。您将学习如何使用魔术方法(如__init__、__str__、__repr__等)来定义对象的基本行为,掌握运算符重载的技巧,实现自定义对象的比较与运算。通过丰富的代码示例,您将能够灵活地扩展......
  • Java中的运算符
    5.1运算符的介绍运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等5.2算术运算符5.2.1介绍算术运算符是对数值类型的变量进行运算的。5.2.2算术运算符分类运算符运算范例结果+正号+55-负号b=6;-b-6+加10+10......
  • 于灵动的变量变幻间:函数与计算逻辑的浪漫交织(下)
    大家好啊,我是小象٩(๑òωó๑)۶我的博客:XiaoXiangζั͡ޓއއ很高兴见到大家,希望能够和大家一起交流学习,共同进步。这一节我们主要来学习单个函数的声明与定义,static和extern…这里写目录标题一、单个函数的声明与定义1.1单个文件1.2多个文件二、stati......
  • java基本运算符
    在运算中:运算时定义不同的类型时,结果都自动升为混合运算类型中最高类型关系运算符:返回的结果:正确,错误,布尔值关系运算符%:模运算,取余+,-,*,/++:自增(b=a++即b=a+1,先执行a+1在赋值)(b=++a即b=a+1,a+1后在赋值)--:自减(b=a--即b=a-1,先执行a-1在赋值)(b=--a即b=a-1,a-1后在赋值)幂运算:2的三......
  • CSS 选择器优先级与继承规则详解
    CSS选择器优先级与继承规则详解在编写CSS时,理解选择器的优先级和继承规则是至关重要的。它们决定了样式如何应用到HTML元素上,尤其是在多个样式规则冲突时。本文将详细介绍CSS选择器的优先级和继承规则,帮助你更好地掌握样式的应用机制。CSS选择器优先级CSS选择器的优......