求int型正整数在内存中存储时1的个数

 

题目描述:

输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

输入描述:

 输入一个整数(int类型)

输出描述:

 这个数转换成2进制后,输出1的个数

输入例子:
5
输出例子:
2

 


 

方法一:

计算机保存数据就是2进制的,如char a = 97;那么在计算机里面的信息就是01100001,用2进制打印就是01100001,用10进制打印就是97,因此只存在显示方式的不同。
c语言中对位操作有几种方式,&与操作,|或操作,^异或操作,~反操作,<<左移位操作,>>右移位操作。
如果想取a的第i位是多少,表达式(a & (1 << i))为0表示第i位为0,非0表示第i位为1。

 1 #include <iostream>
 2 using namespace std;
 3 #define LEN 32
 4 
 5 int main(){
 6     int i;
 7     cin>>i;
 8     int counter = 0;
 9     int len = LEN;
10     while(len--){
11         if(i&(1<<len))
12             counter++;
13     }
14     cout<<counter<<endl;
15     
16     return 0;
17 }

 

方法二:

数字在内存中 ,被转化为二进制。

例如7表示为0111

n&(n-1) 即(0111)&(0110)== 0110 就是 n去除了最后一个1 ;

几个1 就可以在几次内 去除几个1;

 
 1 #include<iostream>
 2 using namespace std;
 3  int main(){ 
 4    int n;    
 5     cin>>n;
 6     int counter=0;
 7     while(n){
 8         n=n&(n-1);
 9         counter++;
10     }
11     cout<<counter<<endl;
12     return 0;
13 }

 

方法三:

利用bitset
bitset stores bits (elements with only two possible values: 0 or 1, true or false, ...).
 1 #include <iostream>
 2 #include <bitset>
 3 
 4 using namespace std;
 5 
 6 int main(){
 7     int i; 
 8     cin>>i;
 9     bitset<32> bt(i);
10     cout<<bt.count()<<endl;
11 }

 

 

 

posted @ 2017-03-14 00:04  镜子里的人  阅读(402)  评论(0编辑  收藏  举报