“软件设计师精讲 数据的表示 逻辑运算”的版本间的差异
Jihongchang(讨论 | 贡献) (→关系运算符) |
Jihongchang(讨论 | 贡献) (→短路原则) |
||
(未显示同一用户的10个中间版本) | |||
第4行: | 第4行: | ||
关系运算符及其优先次序 | 关系运算符及其优先次序 | ||
{| class="wikitable" | {| class="wikitable" | ||
− | |||
!< | !< | ||
!小于 | !小于 | ||
第18行: | 第17行: | ||
!大于或等于 | !大于或等于 | ||
|} | |} | ||
+ | {| class="wikitable" | ||
+ | !== | ||
+ | !等于 | ||
+ | ! colspan="2" rowspan="2" |优先级相同(低) | ||
+ | |- | ||
+ | !!= | ||
+ | !不等于 | ||
+ | |} | ||
+ | 说明: | ||
+ | |||
+ | * 关系运算符的优先级低于算术运算符 | ||
+ | * 关系运算符的优先级高于赋值运算符 | ||
+ | |||
+ | ==== 逻辑运算 ==== | ||
+ | 逻辑变量之间的运算称为逻辑运算。 | ||
+ | |||
+ | 二进制数1和0在逻辑上可以代表“真”与“假”。 | ||
+ | {| class="wikitable" | ||
+ | ! rowspan="4" |逻辑运算 | ||
+ | |<nowiki>逻辑或(||、+、∪、∨、OR):连接的两个逻辑值全0时才取0</nowiki> | ||
+ | |- | ||
+ | |逻辑与(&&、*、·、∩、∧、AND):连接的两个逻辑值全1时才取1 | ||
+ | |- | ||
+ | |逻辑异或(⊕、XOR):连接的两个逻辑值不相同时才取1,相同则取0 | ||
+ | |- | ||
+ | |逻辑非(!、¬、~、NOT、-):将原逻辑值取反即可 | ||
+ | |} | ||
+ | 真值表:描述一个逻辑表达式与其变量之间的关系 | ||
+ | {| class="wikitable" | ||
+ | !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 | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |例:(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 |
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)
|
例题讲解
要判断字长为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