题目:
求某一个数二进制形式的最后一位的数是0还是1;
思路:n的二进制表示中第k位是几
先把第k位移到最后一位 n>>k
然后看看个位是几 x&1
两个结合起
来就是:n>>k&1
//看n的二进制形式表示中第k位是几
#include<iostream>
#include<string.h>
using namespace std;
int main(){
int n=10;
for(int k=3;k>=0;k--) cout<<(n>>k&1);
return 0;
}
知识点:lowbit(x):返回x的最后一位1
比如: x=1010 lowbit(x)=10
x=101000 lowbit(x)=1000;
语法:x&-x=x&(~x+1)
(注意:-x=~x+1)
例子:x=1010..100...0
~x=0101...01...1
~x+1=0101...10...0
x&(~x+1)=00...010...0
题目:求x里面1的个数
给定一个长度为 n的数列,请你求出数列中每个数的二进制表示中 11 的个数。
输入格式
第一行包含整数 n。
第二行包含 n个整数,表示整个数列。
输出格式
共一行,包含 n个整数,其中的第 i个数表示数列中的第 i个数的二进制表示中 11 的个数。
输入样例:
5
1 2 3 4 5
输出样例:
1 1 2 1 2
#include<iostream>
#include<string.h>
using namespace std;
int lowbit(int x)
{
return x&-x;
}
int main(){
int n;
cin>>n;
while(n--){
int x;
cin>>x;
int rest=0;
while(x) x=x-lowbit(x), rest++;//每次减去x最后一位 然后这个数加加
cout<<rest<<' ';
}
}