如何化简CS课程中给定的长布尔表达式?
布尔表达式化简推导
- 已知变量定义:
double x; double y; - 原始待化简布尔表达式:
boolean b = ( (y < -x) ^ (5 * x >= y) ) && ( (x < -y) != (x >= y * 0.2) );
推导步骤
- 首先明确布尔运算基础等价规则:对于任意两个布尔值P、Q,
P ^ Q(异或运算)和P != Q(不等于判断)的运算结果完全一致,二者可等价替换。 - 做不等式等价变形:
- 对
y < -x移项可得x + y < 0,对x < -y移项同样可得x + y < 0,因此(y < -x)和(x < -y)完全等价。 - 对
x >= y * 0.2两边同时乘以正数5,不等号方向不变,可得5 * x >= y,因此(x >= y * 0.2)和(5 * x >= y)完全等价。
- 对
- 对原表达式做等价替换,替换后表达式为:
boolean b = ( (y < -x) ^ (5 * x >= y) ) && ( (y < -x) != (5 * x >= y) ); - 再将第二个括号的
!=替换为等价的^,表达式变为:boolean b = ( (y < -x) ^ (5 * x >= y) ) && ( (y < -x) ^ (5 * x >= y) ); - 任意布尔值和自身做
&&运算,结果等于其本身,因此最终化简结果为:boolean b = (y < -x) ^ (5 * x >= y);
注:以上等价性默认x、y均为非NaN的double值,CS课程常规习题默认不涉及NaN边界场景,若有特殊需求需额外判断
可选等价写法
可根据使用场景替换为其他等价形式:
- 用不等于替代异或,可读性更强:
boolean b = (y < -x) != (5 * x >= y); - 用另一组等价不等式编写:
boolean b = (x < -y) ^ (x >= y * 0.2);
内容的提问来源于stack exchange,提问作者Kittanat Assawakiattikun
相关产品推荐
相关产品推荐

