两个有趣的分支消除方法
第一个例子
#include <cstdio>
int o2x(int v) {
if (v < 10) {
return v + 48; //'0'
} else {
return v + 65 - 10; //'A' - 10
}
}
int main() {
for (int i = 0; i < 16; ++i) {
printf("%c ", o2x(i));
}
return 0;
}
在o2x函数中,if可以做分支消除
1. 改写成三目运算符
return v + ((v < 10) ? 48 : 55);
2. 三目运算符变形
z = cond ? x : y
//改成
z = y - (cond ? (y - x) : 0