1.二级制中1的个数
1.取余法
while (num)
{
count += num % 2;
num ?= 2;
}
return count;
2.移位法
for (int i=0; i<32; i++)
{
count += (num >> i) & 1;
}
return count;
3.按位与运用
n=n&(n-1)
可去点n
最右边的1
while (num)
{
num = num & (num - 1);
count++;
}
return count;
2.分别打印二进制的奇数位,偶数位
打印奇数位
for (i=31; i>=1; i-=2)
{
printf("%d ", (num>>i) & 1);
}
打印偶数位
for (i=30; i>=0; i-=2)
{
printf("%d ", (num>>i) & 1);
}
3.两个数不同二进制位的个数
1.向右移位+按位与1
for (int i = 0; i < 32; i++)
{
if (((m >> i) & 1) != ((n >> i) & 1))
{
count++;
}
}
return count;
2.运用按位异或
ret = m ^ n;
while (ret)
{
ret = ret & (ret - 1);
count++;
}
return count;