请编写一个函数 ,让他把一个给定整数的二进制表示形式中的1 的个数统计出来。
首先要注意: 整数在计算机里的内部存储形式已经是他的二进制补码。根本
就不需要进行数值转换。直接统计1的个数,用移位的方法很简单实现。
int Get1Num( const int x)
{
int y=x;
const int mid=0x0001;
int count;
while( y)
{
if ( y&mid ) count++;
y>>=1;
}
return count;
}
但要注意:负数的右移位,是用符号位1来填充的。所以上面的程序不适合负整数.
解决这个问题,
1种办法:可以把给定的整数的二进制表示形式当作一个无符号数来处理.
int Get1Num( const int x)
{
unsigned int y=x; //注意这里。
// int y=x;
const int mid=0x0001;
int count;
while( y)
{
if ( y&mid ) count++;
y>>=1;
}
return count;
}
第2种办法,
利用C语言中的左移的特性:始终以0来填充。用左移掩码数,而原整数
不动的方法来计数。
int Get1Num( const int x)
{
int y=x;
int mid=0x0001;
int count;
while( mid)
{
if ( y&mid ) count++;
mid<<=1;
}
return count;
}
|
文件: | get1Num.tar.gz |
大小: | 0KB |
下载: | 下载 |
|
源代码
阅读(3523) | 评论(6) | 转发(0) |