如何在 C 中执行无分支条件算术运算?

问题描述 投票:0回答:1

我有一个值

int x
,我想有条件地添加(例如)一个值
int y
,具体取决于
bool c
。我可以写这样的代码:

if (c)
    x += y;

没有分支我怎么能写这个?

c bit-manipulation branch micro-optimization
1个回答
0
投票

从布尔值按位与创建一个掩码,然后添加:

x += -(int)c&y;

这样,如果布尔值为假,则该值仍为 0,并且按位与 0 与任何数字都会得到 0,因此这将导致该值加 0。否则,对

true
求反将得到
-1
,它在 2 的补码中全为 1,这将按位返回
y
,并将
y
添加到
x

© www.soinside.com 2019 - 2024. All rights reserved.