给定一个32位整数N,设计一种算法来查找N的二进制表示中零的数量。
我能想到的最简单的算法是检查二进制表示中的零,在C语言中可能是这样的:
我在想是否有一些算法能够在常数时间内计算。
对于输入0,它应该返回1而不是32。
对于5,输出应该是1。因为二进制表示为101。
对于7,输出应该为0。
准确地说,我正在寻找更好的算法来计算32位整数二进制解释中非前导零的数量。希望问题现在清楚了。 编辑: 正如Alex Martelli、delroth指出的,我正在修改我的代码以使其更易读,并使用迭代。
我能想到的最简单的算法是检查二进制表示中的零,在C语言中可能是这样的:
可能重复:
在32位整数中计算设置位数的最佳算法是什么?
我能想到的最简单的算法是检查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指出的,我正在修改我的代码以使其更易读,并使用迭代。