一.统计二进制数中1的个数
法1:位操作
#include<stdio.h>
int _count_one_bits(int x)
{
int count = 0;
for (int i = 0; i < 32; i++)
{
if (((x >> i) & 1) == 1)
count++;
}
return count;
}
int main()
{
int num;
scanf("%d", &num);
int ret = _count_one_bits(num);
printf("%d", ret);
return 0;
}
法2:模2除2
注:输入负数整数时须强制转化类型为 (unsigned int)
#include<stdio.h>
int _count_one_bits(unsigned int x)
{
int count = 0;
while (x)
{
if ((x % 2) == 1)
count++;
x /= 2;
}
return count;
}
int main()
{
int num;
scanf("%d", &num);
int ret = _count_one_bits(num);
printf("%d", ret);
return 0;
}
法3:n=n&(n-1)
注:此操作可以消去n最右边的一个1
#include<stdio.h>
int _count_one_bits(int x)
{
int count = 0;
while (x)
{
x = x & (x - 1);
count++;
}
return count;
}
int main()
{
int num;
scanf("%d", &num);
int ret = _count_one_bits(num);
printf("%d", ret);
return 0;
}
二.用位操作符交换两个数
#include<stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("%d %d", a, b);
return 0;
}