求二进制1的个数,负数用补码
//求二进制1的个数,负数用补码
int f1(int n)
{
unsigned int m=0;
while(n)
{
n &= (n-1);
++m;
}
return m;
}
int f1_2(int n)
{
unsigned int m=0;
int c = 32;
while(c--)
{
if (n & 0x00000001)
{
m += 1;
}
n>>=1;
}
return m;
}
求二进制0的个数,负数用补码(不计算前缀0)
int f0_2(int n)
{
unsigned int m=0;
int count = 0,t;
int jc = 0;
while(count<32)
{
count++;
if (n & 0x1)
{
t = count; //最高位的1是在第几位
jc ++;//出现1的次数
}
else{
m += 1;
}
n>>=1;
}
return t-jc;//相减得到0的次数
}
int m = -124; //补码 10000100
cout<<f1(m)<<endl;//26
cout<<f0_2(m)<<endl;//6
该博客主要探讨如何在计算机中,特别是对于负数使用补码的情况下,计算二进制表示中1的个数和0的个数。以-124为例,其补码表示为10000100,程序输出显示1的个数为26,0的个数为6。
3880

被折叠的 条评论
为什么被折叠?



