位运算技巧

位运算技巧

异或实现的交换数

通常的交换两个变量a,b的过程为

1
2
3
4
int temp;
temp=a
a=b;
b=temp;

需借助上面的第3个临时变量temp.

采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量:

1
2
3
a = a ^ b;
b = a ^ b;
a = a ^ b;

这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质:

  1. 任意一个变量X与其自身进行异或运算,结果为0,即X^X=0
  2. 任意一个变量X与0进行异或运算,结果不变,即X^0=X
  3. 异或运算具有可结合性,即a^b^c=(a^b)^c=a^(b^c)
  4. 异或运算具有可交换性,即a^b=b^a

某些缓存文件可以通过异或来简单加密,特征文件大小不变

对2的幂快速取余

1
m % 2^n  <=>  m & (2^n - 1)

快速判断属性的存在

借鉴了 bitmap 思想,把某个属性的开启和关闭映射到2进制位的0,1

令 0x01,0x02,0x04,0x08 表示a,b,c,d属性的开启,0x00 表示关闭:

  • 总的配置为 option = option_a|option_b|option_c|option_d
  • 判断属性的存在 option & option_a = option_a
-------------本文结束感谢您的阅读-------------
坚持分享,您的支持将鼓励我继续创作!
0%