C++的位运算之位移运算符
·
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次方
更多推荐

所有评论(0)