C++的位运算之位移运算符

1、左移 <<

x<<k:把x二进制整体向左移动k位,空出来的右边补0,等价于x乘以2的k次方。

用来快速乘2的k次方。

例如:5<<1,5的二进制是0101,向左移一位二进制变成01010,转成十进制为10。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a=5;//5的二进制为0101 
	int b=a<<2;//左移两位为5乘2的2次方等于20
	cout<<b;//输出20
	return 0;	
}

2、右移 >>

x>>k:把x的二进制整体向右移k位,正数左边补0,负数左边补1,右移几位,最右边就舍弃几位。等价于x除以2的k次方,向下取整。

例如:12>>2,12的二进制是1100,向右移两位,二进制变成0011,转成十进制为3。

用来快速整除2的k次方。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a=13;//二进制为1101
	int b=a>>1;//二进制为0110,转成十进制为6
	int c=b>>1;//二进制为0011,转成十进制为3
	cout<<b<<endl;//输出6
	cout<<c;//输出3
	return 0;
}

3、总结

位移 << 与 >> 不改变原变量本身。

<<=>>= 修改变量本身。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a=4;//二进制为100
	a<<1;//二进制为1000,转成十进制为8
	cout<<a<<endl;//输出4
	a<<=1;//二进制为1000,转成十进制为8
	cout<<a<<endl;//输出8
	return 0;
}

1<<k 快速得到2的k次方

n>>k 正数快速得到n除以2的k次方

更多推荐