位运算的一些技巧总结

位运算

这里主要总结一些位运算的基础用法,不从位运算的运算过程展开了:

1.&(and)运算

&运算通常用于二进制取位操作,例如一个数 & 1的结果就是取二进制的最末位。

基础用法:

(1)可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。

(2)x & (x-1) 用于消去 x 的最后一位 1。

(3)在运用(2)的基础上可以用来判断一个正整数是不是2的整数幂次,如果x & (x-1) 是0,说明是;如果不是0,说明不是;


2.| (or)运算

|运算通常用于二进制特定位上的无条件赋值,例如一个数 | 1的结果就是把二进制最末位强行变成1。

基础用法:

(1)如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。

(2)


3.^(xor)运算

^运算通常用于对二进制的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。

基础用法:

(1) ^ 运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a ^ b) ^ b = a。

(2)一个数 a^a=0;

(3)运用(1)可以延伸很多用法,比如判断一个数组里面出现一次的数(其他的数出现两次);

(4)是第(3)的进阶,有一个 n 个元素的数组,除了两个数只出现一次外,其余元素都出现两次,让你找出这两个只出现一次的数分别是几?
这道题的思路是把所有元素都异或,那么得到的结果就是那两个只出现一次的元素异或的结果。然后把这个结果转化为二进制,找到为 1 的一个位置,根据这个位置是否为1把数组里所有的元素分成两部分;然后两部分分别异或,得到的就是两个只出现一次的数;


4.这几种常见的位运算运算性质

(1)信息丢失

位运算中“与”、“或”会造成信息丢失,他们是单向运算,不可逆运算。

但是“异或”不会,例如:

x ^ a = y;
当a 确定时,x与y 一一对应,且
x = y ^ a;

(2)运算性质

一般情况下,结合律和分配律是失效的,只有交换律能安全使用。

例如:

交换律:
a | b=b | a;
a ^ b=b ^ a;
a & b=b & a;

结合律:
(3|1)&2=2;
3|1&2=3;

分配律:
(4|3)^1=6;
(4 ^1 ) | ( 3 ^1)=7;

但是对于单一的位运算来说,结合律都是符合的,其实就是变为了交换律;


贴一张用法大全图:

在这里插入图片描述

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值