一、概述:
任何数据在计算机中都是以二进制存储,位运算是指直接对二进制位进行操作,所以效率很高。
二、运算符:
符号 | 含义 | 运算规则 |
& | 与 | 0&0=0;0&1=0;1&1=1;1&0=0; |
| | 或 | 1|1=1;1|0=1;0|1=1;0|0=0; |
~ | 去反 | ~0=1;~1=0;(结合性:右到左) |
^ | 异或 | 1^1=0;1^0=1;0^1=1;0^0=0;(相异为1,相同为0) |
<< | 左移 | 0001<<k=0100,k=2,k是左移的位数,这里k = 2. |
>> | 右移 | 0100>>k=0001,k=2,k是右移的位数,这里k = 2. |
三、操作
(一)n的二进制表示中第k位(自右向左)是几?//有第0位:
- 先把第k位移到最后: n>>k;
- 看个位是几:x&1
总:1+2:n>>k&1
int main()
{
int n=10;
for(int k=3;k>=0;k++)
{
coutt<<(n>>k&1)
}
return 0;
}
(二)、lowbit(x):返回x最后一位1及后面所有零。
返回:x&-x 或 x&(~x+1)
例:求二进制中1的个数
int lowbit(int x)
{
return x&-x;
}
int main()
{
int n;
cin>>n;
while(n--)
{
int x;
cin>>x;
int res=0;
while(x){
x-=lowbit(x);
res++;
}//每次减去x的最后一位1
}
cout<<res<<endl;
return 0;
}