c - C 中不带分支的 double 或集合整数

标签 c branch-prediction

我想编写一个函数,在调用时将其参数加倍(如果它非零)或返回一个特定常量(如果它为零)。如果有帮助的话,常数始终是 2 的幂。

假设常量是 8。当用 0 调用时,我希望它返回 8。当用 8 调用时,我希望它返回 16。依此类推。

简单的方法是这样的:

unsigned foo(unsigned value)
{
    return (value ? value * 2 : 8);
}

是否可以在不分支的情况下完成此操作?

最佳答案

这不会导致额外的内存访问。

int f(int a)
{
    const int c = 8;
    return (a*2)+(a==0)*c;
}

关于c - C 中不带分支的 double 或集合整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33032678/

相关文章:

c - 读取文件并存储到变量中

c - 搜索字符串

c++ - 分支预测和分支目标预测优化

c++ - 在 C++ 中,在不改变程序流程的情况下使用 'else' 对性能有何重要性?

c - 为什么这些构造使用前后递增的未定义行为?

c++ - GUID 和哈希表 - 如何使用它们?

c - C 中的感知器分支预测器实现

c++ - 使用分支启动函数

c++ - Windows 版本识别 [C/C++]