目录
一、基本操作
计算机中以二进制补码的形式存储。
1、求一个整数n的二进制表示中第k位(个位数字为第0位)数字是几
(1) 先把第k位移到最后一位:n>>k
(2) 看个位是几:x&1
即 n>>k&1
2、lowbit (x):返回x的最后一位1
如:x=1010 lowbit(x)=10
x=101000 lowbit(x)=1000
二、代码模板
求n的第k位数字: n >> k & 1
返回n的最后一位1:lowbit(n) = n & -n
三、经典例题
【例一】二进制中1的个数
题目描述:
代码:
//本题思路:每次减去最后一位1,看减去多少次
//就能求出每个数中1的个数
#include<bits/stdc++.h>
using namespace std;
int n;
int lowbit(int x)
{
return x & -x;//返回最后一位1
}
int main()
{
scanf("%d",&n);
while(n--)
{
int x;
scanf("%d",&x);
int res=0;
while(x)
{
x -= lowbit(x); //每次减去x的最后一位1
res++;
}
printf("%d ",res);
}
return 0;
}