以下代码是否可以进一步优化(即可以转换为单行表达式),通过一些按位操作还是其他什么?
if(A_BOOL_VARIABLE)
return (A == B);
else
return (A != B);
注意:此处A和B不是bool
类型。
答案 0 :(得分:5)
return A_BOOL_VARIABLE == (A == B);
真相表:
A_BOOL_VARIABLE (A == B) Result
T T T
T F F
F T F
F F T
与原始if..else
相同。
答案 1 :(得分:2)
不是按位,而是一个简单的布尔异或:
return A_BOOL_VARIABLE ^ (A!=B);
我想这是A==B = !(A!=B)
。
答案 2 :(得分:1)
为了简洁起见,将A_BOOL_VARIABLE
重命名为C
,真值表是:
C A B Result
0 0 0 0 \
0 0 1 1 | == A ^ B (C=0)
0 1 0 1 |
0 1 1 0 /
1 0 0 1 \
1 0 1 0 | == ! (A ^ B) (C=1)
1 1 0 0 |
1 1 1 1 /
所以最后的表达式可能是:A ^ B ^ C
其中^
是独占的。