目录
位运算简介
位运算是一种对二进制数的位进行操作的运算方式
它直接对二进制数的每一位进行逻辑操作,而不考虑整个数的数值大小,一般情况下,位运算中每一位都相互独立,各自运算得出结果(左右移位)除外
在计算机科学和编程中,位运算经常考察异或的性质、状态压缩、与位运算有关的特殊数据结构、构造题等。
注意:位运算只能应用于整数,且一般为非负整数,不能应用于字符、浮点等类型。
& 两个操作数都为1时结果为1,否则为0
|两个位中,一个为1,结果就为1
^当两个位不同时,结果位为1,否则为0
0变1 1变0
往高位移动,低位补0
例如,对于整数5(00000101),执行左移3位操作,相当于执行5*(2^3)
相当于对原数除以2的幂次方操作
x&1??????? 如果结果是1说明是奇数,反之偶数
x>>i&1??????? 结果必然为1or0,表示x中的第i位
x|(1<<i)
x&(x-1)??????? 如果是2的幂次方为0,因为:如果x是2的幂次方,x-1就有很多个连续的1且和x的1没有交集,两者运算一定为0,且其他情况必然不为0
lowbit(x) = x&-x ??????? 如果x=(010010),则lowbit(x)=(000010)常用于结构树状数组中。
输入一个十进制正整数n,输出n的二进制中1的个数。
#include<iostream>
using namespace std;
int main()
{
unsigned int x; cin >> x;
int ans = 0;
while (x)
{
if (x & 1)ans++;
x >>= 1;
}
cout << ans << endl;
return 0;
}