位运算

记得之前C++老师讲过一些关于位操作的知识,今天系统的整理一下

位运算定义

参考来源:位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的。
位运算就是直接对整数在内存中的二进制位进行操作。

几个位运算

按位与&:
当两个位均为1时,结果才会是1
按位或|:
当两个位均为0时,结果才会是0
异或^:
两个位相同为0,相异为1
取反~:
0->1
1->0
左移<<:
左移相应位数,右边空出的位补0,左边的位将被移出,相当于×2
右移>>:
右移相应位数,右边的位被移出,左边空出的位,若原来被移除的位为0则补0,为1则补1,相当于/2

位操作的应用

1.判断奇偶

if(n&1){
	cout<<"is an odd number"<<endl;
}
else cout<<"is an even number"<<endl;

2.快速取模

a%(pow(2,n))=>a&(pow(2,n)-1)
pow(2,n)=>1<<n
e.g.
x%64=>x&63

当然,有一定的局限性

3.乘除法转换

a*(2^n)=>a<<n;
a/(2^n)=>a>>n;

4.交换数据

void swap(int&x,int& y){
	x^=y;
	y^=x;
	x^=y;
}

5.翻转位
若要翻转某位或者某几位,只需让要翻转的对应位是1,其余为均为0

6.移位运算符和加减运算符优先级
加减运算符优先级大于移位运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值