相关疑难解决方法(0)

如何在C中计算2 ?? / n?

如何计算整数除法2 64 / n?假设:

  • unsigned long 是64位
  • 我们使用64位CPU
  • 1 <n <2 64

如果这样做18446744073709551616ul / n,我们将warning: integer constant is too large for its type在编译时到达。这是因为我们无法在64位CPU中表示2 64。另一种方法如下:

#define IS_POWER_OF_TWO(x) ((x & (x - 1)) == 0)

unsigned long q = 18446744073709551615ul / n;
if (IS_POWER_OF_TWO(n))
    return q + 1;
else
    return q;
Run Code Online (Sandbox Code Playgroud)

是否有更快的(CPU周期)或更干净的(编码)实现?

c integer-division

10
推荐指数
2
解决办法
450
查看次数

标签 统计

c ×1

integer-division ×1