题目描述:
输入一个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。
#include <iostream> using namespace std; #define LEN 32 int main(){ int i; cin>>i; ; int len = LEN; while(len--){ <<len)) counter++; } cout<<counter<<endl; ; }
方法二:
数字在内存中 ,被转化为二进制。
例如7表示为0111
n&(n-1) 即(0111)&(0110)== 0110 就是 n去除了最后一个1 ;
几个1 就可以在几次内 去除几个1;
#include<iostream> using namespace std; int main(){ int n; cin>>n; ; while(n){ n=n&(n-); counter++; } cout<<counter<<endl; ; }
方法三:
利用bitset
A bitset stores bits (elements with only two possible values: 0 or 1,
true
or false
, ...).
#include <iostream> #include <bitset> using namespace std; int main(){ int i; cin>>i; bitset<> bt(i); cout<<bt.count()<<endl; }