gpt4 book ai didi

c++ - 找到大于或等于 x(正整数)z(正整数,可能是 2 的幂)倍数的最小整数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:29 30 4
gpt4 key购买 nike

可能是非常简单的问题,但我提出的这个实现看起来太复杂了......

unsigned int x;
unsigned int z;
unsigned int makeXMultipleOfZ(const unsigned x, const unsigned z) {
return x + (z - x % z) % z;
//or
//return x + (z - (x + 1) % z - 1); //This generates shorter assembly,
//6 against 8 instructions
}
  • 我想避免 if 语句
  • 如果这有帮助,我们可以有把握地说 z 将是 2 的幂

在我的例子中 z=4(我知道我可以用 & 位运算符替换模运算),我想知道是否可以实现涉及更少的步骤。

最佳答案

如果 z 是二的幂,则模运算可以简化为这种按位运算:

返回 (x + z - 1) & ~(z - 1);

例如,这种逻辑对于数据结构边界对齐非常常见。更多信息在这里:https://en.wikipedia.org/wiki/Data_structure_alignment

关于c++ - 找到大于或等于 x(正整数)z(正整数,可能是 2 的幂)倍数的最小整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19450743/

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