如果没有设置任何位,是否采用无分支方式设置所有位?



我正在寻找以下的无分支实现:

int f(int c) {
if (c == 0) {
return 0xffffffff; // all bits set
} else {
return c;
}
}

我还没有想出任何聪明的方法来做这件事。什么技巧吗?

正如Nick ODell所提到的,编译器很有可能已经将这些代码编译成没有分支的指令。更有可能出现这种情况的公式是x - (x == 0)x - !!x,编译器通常可以通过使用CPU特定的特性来实现没有分支的情况。你甚至可以尝试用一个纯粹基于位操作的公式来代替它。例如,((x - 1) & ~x) >> 31(xunsigned)仅当x == 0时为1,否则为0。所以

x - (((x - 1) & ~x) >> 31)

将是f的完全无分支的实现。在实践中,我希望它比编译器为其他公式生成的任何公式都要慢。

相关内容

  • 没有找到相关文章

最新更新