如何计算整数除法2 64 / n?假设:
unsigned long 是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周期)或更干净的(编码)实现?