位运算作用与运用

位运算

经典案例与运用

经典应用之一是掩码操作,通过位运算可以提取或设置特定二进制位的值。例如,通过按位与操作可以将某些位清零,或者通过按位或操作可以将某些位设置为1。这在操作系统开发、网络协议处理等领域中非常常见。

另一个经典应用是位运算可以替代某些数学运算,使程序更加高效。例如,位运算可以用来求整数的除法和取余操作,通过位移和按位与操作可以快速计算乘法和除法的结果。此外,位运算还可以实现快速排序中的一些操作,如交换两个数的值

位运算还可以用于优化程序的空间和时间复杂度。通过位运算,可以用较少的存储空间表示和存储数据,例如使用位向量或位图。此外,位运算还可以加速一些特定的算法,如位图索引和布隆过滤器。

总结起来,位运算在计算机科学中有多种经典应用,包括掩码操作、数学运算的替代、排序算法中的优化以及空间和时间复杂度的优化。使用位运算可以提高程序的效率和性能。

位运算的定义

按位与(&)

按位与(&):将两个操作数的对应位都为1的情况下,结果的对应位才为1,否则为0。

  • 1 & 0 = 0
  • 1 & 1 = 1
  • 0 & 1 = 0
  • 0 & 0 = 0

按位或(|)

按位或(|):将两个操作数的对应位中只要有一个位为1,结果的对应位就为1,否则为0。

  • 1 | 0 = 1
  • 1 | 1 = 1
  • 0 | 1 = 1
  • 0 | 0 = 0

按位异或(^)

按位异或(^):将两个操作数的对应位相异的情况下,结果的对应位才为1,否则为0。

  • 1 ^ 0 = 1
  • 1 ^ 1 = 0
  • 0 ^ 1 = 1
  • 0 ^ 0 = 0

运用案例一,按位与代替取模

当取模数为2的n次方时,可以用按位与代替取模符,在取模频率较高的情况下,效率有显著的提升

int modNum = 4;

System.out.println(3 & (modNum - 1));
System.out.println(4 & (modNum - 1));
System.out.println(5 & (modNum - 1));
System.out.println(6 & (modNum - 1));
System.out.println(7 & (modNum - 1));
System.out.println(8 & (modNum - 1));
3
0
1
2
3
0

运用案例二,变量替换

int a = 7;
int b = 4;
System.out.printf("a=%s, b=%s \n", a, b);
a = a^b;
b = b ^ a;
a = a ^ b;

System.out.printf("a=%s, b=%s", a, b);
a=7, b=4 
a=4, b=7
0%