软件设计师精讲 数据的表示 逻辑运算

来自姬鸿昌的知识库
Jihongchang讨论 | 贡献2024年4月10日 (三) 15:15的版本 →‎短路原则
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

https://www.bilibili.com/video/BV13U4y1E7oA/?p=7

关系运算符

关系运算符及其优先次序

< 小于 优先级相同(高)
<= 小于或等于
> 大于
>= 大于或等于
== 等于 优先级相同(低)
!= 不等于

说明:

  • 关系运算符的优先级低于算术运算符
  • 关系运算符的优先级高于赋值运算符

逻辑运算

逻辑变量之间的运算称为逻辑运算。

二进制数1和0在逻辑上可以代表“真”与“假”。

逻辑运算 逻辑或(||、+、∪、∨、OR):连接的两个逻辑值全0时才取0
逻辑与(&&、*、·、∩、∧、AND):连接的两个逻辑值全1时才取1
逻辑异或(⊕、XOR):连接的两个逻辑值不相同时才取1,相同则取0
逻辑非(!、¬、~、NOT、-):将原逻辑值取反即可

真值表:描述一个逻辑表达式与其变量之间的关系

A B !A A+B A*B A⊕B
0 0 1 0 0 0
0 1 1 1 0 1
1 0 0 1 0 1
1 1 0 1 1 0

逻辑运算符

&& (逻辑与)相当于其他语言中的AND

|| (逻辑或)相当于其他语言中的OR

! (逻辑非) 相当于其他语言中的NOT

例: a&&b 若a,b为真,则 a&&b 为真。

a || b 若 a,b 之一为真,则 a||b 为真。

! a 若a 为真,则 !a 为假。


优先次序:

!(非)-> &&(与) -> ||(或)

逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符

因此运算符的优先顺序为:!>算术运算符>关系运算符>&&>||>赋值运算符

先做 !

然后算术运算 * / + -

之后关系运算 > ≥ ≤ < == !=

最后做逻辑运算,先做 与 &&、再做 或 ||

短路原则

在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。

(1)a&&b&&c 只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值

(2)a||b||c 只要a为真,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c

例:(m=a>b)&&(n=c>d)


当a=1,b=2,c=3,d=4,m和n的原值为1时,由于"a>b"的值为0,因此m=0,而"n=c>d"不被执行,因此n的值不是0而仍保持原值1。

例题讲解

要判断字长为16位的整数a的低四位是否全为0,则(A)。

A、将 a 与 0x000F 进行“逻辑与”运算,然后判断运算结果是否等于0

B、将 a 与 0x000F 进行“逻辑或”运算,然后判断运算结果是否等于F

C、将 a 与 0x000F 进行“逻辑异或”运算,然后判断运算结果是否等于0

D、将 a 与 0x000F 进行“逻辑与”运算,然后判断运算结果是否等于F

解:十六位,一个是4位,低4位就是f

和 f 逻辑与是0 的会是?1和1相与是1,0和1相与是0;

和 f 逻辑或为f 的会是?1和1相或是1,0和1相或也是1;

和1异或为0的会是?1和1异或是0;0和1异或是1;

和1逻辑与为 1 的会是? 1?

原题解:


对布尔表达式进行短路求值是指:无须对表达式中所有操作数或运算符进行计算就可确定表达式的值。对于表达式“a or ((c<d) and b)”,

(B)时可进行短路计算。

A、d 为 true

B、a 为 true

C、b 为 true

D、c 位 true