位运算

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 }

 

posted @ 2023-08-22 14:41  宠柳娇花  阅读(23)  评论(0)    收藏  举报