【发布时间】:2009-11-22 03:12:46
【问题描述】:
可能重复:
Best algorithm to count the number of set bits in a 32-bit integer?
给定一个 32 位整数 N,设计一个算法来找出 N 的二进制位表示中的零的个数。
我能想到的最简单的算法是检查零的二进制表示,在 C 中是这样的:
int num_of_zero(int num)
{
if(0 == num) return 1; /*For the input 0 it should output 1 */
int Count = 0;
while(num>0){
if(0 == (num&1)) Count++;
num >>= 1;
}
return Count;
}
如果有一些算法可以在恒定时间计算,我正在徘徊。
对于输入 0,它应该返回 1 而不是 32。
对于5,输出应该是1。因为二进制表示是101。
对于 7,输出应为 0。
确切地说,我正在寻找一种更好的算法来计算 32 位整数的二进制解释中(非前导)零的数量。希望问题现在很清楚。
编辑:正如 Alex Martelli 指出的那样,delroth 我正在修改我的代码以使其更具可读性并这次使用迭代。
【问题讨论】:
-
num_of_zero(num >> 1); if(!(num & 1))Count++;你能把它分解吗?我看不出这将如何工作。我错过了什么明显的东西吗?
-
在 OP 有机会回答问题之前,我不太喜欢标记作业。对于自学的人来说,SO 有很多先例。而且,如果它是家庭作业并且他们使用从网上逐字找到的解决方案,他们几乎肯定会因为剽窃而失败(如果他们的教育者有一点点智慧的话)。
-
@nthrgeek,如果这个是作业,请标记它。
-
@paxdiablo:不,这不是家庭作业问题,我正在寻找更好的算法,因为这是 O(n)。