在C中没有分支的双精度或整数

时间:2015-10-09 07:43:45

标签: c branch-prediction

我想写一个函数,当被调用时,它的参数加倍(如果它不为零)或返回一个特定的常量(如果它为零)。如果有帮助,常数总是2的幂。

让我们说常量为8.当用0调用时,我希望它返回8.当用8调用时,我希望它返回16.依此类推。

琐碎的方法就像:

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

是否可以在没有分支的情况下执行此操作?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

static int myconst[2] = { 8, 0 };
int f(int x)
{
    return x + x + myconst[!!x];
}