布尔表达式NOT运算符使用时机及区间奇偶判断逻辑疑问
问题逻辑与写法差异说明
首先明确你要实现的两个核心规则:
- 规则1:
n处于-15到50的闭区间内 - 规则2:如果
n处于10到20的闭区间内,不能为奇数(即该区间内仅偶数合法)
原代码逻辑正确性分析
你原本的代码逻辑完全匹配需求:
n = 21; b1 = (n>=-15 && n<=50); // 校验是否满足规则1,满足则返回true b2 = (n % 2 != 0) && (n>=10 && n<=20); // b2为true代表「n在10-20区间且是奇数」,也就是需要排除的非法场景 result = b1 && !b2; // 同时满足规则1,且不属于非法场景,即最终合法
修改后b2写法的问题
如果你把b2改为b2 = (n % 2==0) && (n>=10 && n<=20),此时逻辑会完全颠倒:
- 修改后的
b2为true代表「n在10-20区间且是偶数」 - 对应的
!b2就变成了「要么不在10-20区间,要么在10-20区间但为奇数」 - 最终
result = b1 && !b2的效果就是:-15到50区间内,10-20区间仅奇数合法,偶数全部被排除,和你的需求完全相反。
实测验证
用两个典型值测试就能直观看出差异:
| 测试值n | 原写法result | 修改后写法result | 实际是否合法 |
|---|---|---|---|
| 12(10-20区间偶数) | true(正确) | false(错误) | 合法 |
| 13(10-20区间奇数) | false(正确) | true(错误) | 非法 |
内容的提问来源于stack exchange,提问作者Aya
相关产品推荐
相关产品推荐

