编程第一题:
给定任意一个整数的二进制的形式,统计其中1的个数
希望大家编写各自的算法谢谢
/*计算整数number的比特位值为1的位数*/
int getBits(int number)
{
int sum= 0;
for( ; number; number&= number-1)
sum++;
return sum++;
}
关键是:number &=(number-1)
1):number 为奇数,则number&=(number - 1)提取末尾1,并将结果赋给number。计数器显然要加1。
2):number 为偶数,则number&=(number - 1)number最末尾的1置成0,其余不变,并将结果赋给number。若此时number不为0,则说明仍可继续,由于已经将number最末尾的1置成0,因此,计数器也要加1。
详见《高效程序的奥秘》。
[此贴子已经被作者于2007-11-5 11:22:13编辑过]
/*计算整数number的比特位值为1的位数*/
int getBits(int number)
{
int sum= 0;
for( ; number; number&= number-1)
sum++;
return sum++;
}
关键是:number &=(number-1)
1):number 为奇数,则number&=(number - 1)提取末尾1,并将结果赋给number。计数器显然要加1。
2):number 为偶数,则number&=(number - 1)number最末尾的1置成0,其余不变,并将结果赋给number。若此时number不为0,则说明仍可继续,由于已经将number最末尾的1置成0,因此,计数器也要加1。
详见《高效程序的奥秘》。
好!!
请问有没有这本书的电子版的,最好是中文的