位运算
10的二进制1010
1010从右往左 标号 0 1 2 3
个位是0 依次往左走
把二进制第k位移动到个位 需要右移k次
1010
101
10
1
把第3位(从0开始) 移动到个位 要右移3次 n>>3
然后输出个位 n&1
综合 n>>3&1
求数的二进制中1的个数:
二进制中的1:10进制的数i i&(-i)就是二进制中最右边一个1 这个1指的是1以及1右边的0
求二进制中1的个数 就是用二进制数本身减去 最右边的1 看减去了几次最右边的1 就有多少个1
注意: 计算机中的数都是二进制 所以代码不用把十进制数转换为二进制数 直接用十进制数来表示就行 内部就是二进制数进行的&运算
代码:
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 int n;
6 scanf("%d",&n);
7 while(n--)
8 {
9 int x,s=0;
10 scanf("%d",&x);
11 for(int i=x;i;i-=i& -i) s++;
12 printf("%d ",s);
13 }
14 return 0;
15 }
浙公网安备 33010602011771号