位运算的知识点
1.位运算概述:
我们知道,计算机中的数在内存中都是以二进制形式存储的,而位运算就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高。
涉及位运算的运算符如下:

2.运算符的优先级
| 运算符 | 结合方向 |
|---|---|
| ~(取反运算符),++(自增),–(自减) | 从右往左 |
| *(乘),/(除),%(取余) | 从左往右 |
| <<(左移),>>(右移) | 从左往右 |
| 大于(>),小于(<),大于等于,小于等于 | 从左往右 |
| 等于(==),不等于(!=) | 从左往右 |
| &(与) | 从左往右 |
| ^(异或) | 从左往右 |
| 或 | 从左往右 |
3.位运算符的运算律

4.位运算的高级操作

5.lowbit函数
lowbit(x)=x&(-x),返回的是x地最后一个1及其后面的所有的0。
例如:a=11000,则lowbit(a)=1000。
6.位运算的一些应用
1.位运算实现乘除法
a<<1等价于a*2;//将x左移一位实现*2
a>>1等价于a/2;//将x右移一位实现/2
2**.位运算交换两个整数**
void swap(int &a,int &b)
{
a^=b;
b^=a;
a^=b;
}
我们来剖析一下它的原理:
/*对于a=a^b,则b=b^(a^b),根据交换律以及异或性质,得
b=b^b^a=0^a=a;同理a=(a^b)^a=0^b=b,这样就实现了交换操作
3.位运算判断奇偶数
我们知道,在二进制中,最低为决定了是奇数还是偶数,所以我们可以提取出最低位的值,即与1相与,结果为0则是偶数,为1则是奇数
4.位运算统计二进制数1的个数
法一:
int res=0;
for(int i=0;i<32;i++)//一个数变为二进制,最多是32位,所以循环32次
{
if(n>>i&1)//判断一个数变为二进制后的每一位是否为1,1&1为1
res++;
}
法二:
int res=0;
//lowbit写法
while(n) n-=n&-n,res++;//n&-n会返回最后一个为1的二进制,然后用n把1减去,减几次就说明有几个1

1806

被折叠的 条评论
为什么被折叠?



