位运算总结(基础运算符、位运算技巧、清位、取位)

位运算运算符:
注:位运算基于补码
1.按位取反 ~ (1 0互换)
2.按位与 & (和&&同理)
3.按位或 | (和||同理)
4.按位异或 ^ (不同为1,相同为0)
5.右移 >> (右位消失,左侧补符号位或0)
6.左移 << (左位消失,右侧补0)

位运算技巧:
1.关于&
取二进制某位上的数:
例如取后三位,将Num & 111
原理:因为num & 1 = 本身, num & 0 = 0;

实际:思考num%8,实际就是取二进制的后三位,于是:num % 8 等价于 num & 7

2.关于^
常用于加密,解密
原理:num ^ 0 = num, num ^ 1 = !num

3.将某位设置为1或0(置位,清位)
置位:
SET(NUM, i)
((num) |=(1 << (7 - i)) 或 (1 << ((i) ^ 7))
实际就是将0000 0001中的1移到想要置位的位置,将Num | 结果

原理:num | 1 = 1 ; num | 0 = num;

清位:
CLR(NUM, i)
((num) &= ~(1 << (7 - i)) 或 ~(1 << ((i) ^ 7))
实际就是将1111 1110中的0移到想要置位的位置,将Num & 结果

原理:num & 1 = num, num & 0 = 0;

取位:
(num >> (i ^ 7)) & 1
将所求位移到最右,结果&1 (即除最右,都变0)

解释:
上述操作都用到了i^7这个操作,实际是替换了7-i
假如想将i = 0位置零,按原理我们需要将0000 0001中1移到开头,即左移7位,
所以就是<<(7 - i) 但若想加快这个计算,用二进制计算更为快捷
7-i == i ^7

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值