gpt4 book ai didi

c - 优化 "i = b ? (i | mask) : (i & ~mask)"

转载 作者:太空狗 更新时间:2023-10-29 15:11:29 28 4
gpt4 key购买 nike

我希望能够设置或清除 uintX_t 的(多个)位。

i 是一个运行时变量 (uintX_t)。b 是一个运行时变量 (uintX_t),它被限制为 01

mask 是编译时常量。

有没有比以下更好的方法:

i = b ? (i | mask) : (i & ~mask)

如果可能的话,我希望避免分支。如果重要的话,目标是 ARM。

最佳答案

利用 -1u 是设置了所有位的值这一事实:

i = (i & ~mask) | (mask & -b);

i ^= (i ^ -b) & mask;

第二种方法减少了操作次数和代码大小。第一种方法在超标量架构上可能仍然更快,因为一些操作可以并行执行。

关于c - 优化 "i = b ? (i | mask) : (i & ~mask)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40629878/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com