【算法】常见位运算总结

目录

  • 1.基础位运算
  • 2. 给一个数n,确定它的二进制表示中的第x位是0还是1
  • 3.将一个数n的二进制表示的第x位修改成1
  • 4.将一个数n的二进制表示的第x位修改成0、
  • 5. 位图的思想
  • 6.提取一个数(n)二进制表示中最右侧的1
  • 7.干掉一个数(n)二进制表示中最右侧的1
  • 8.位运算的优先级
  • 9.异或(^运算的运算律)

1.基础位运算

									0 1 0
									0 1 1
									-----
&:有0就是0							0 1 0
|:有1就是1							0 1 1
^:相同为0,相异为1  /无进位相加 		0 0 1

2. 给一个数n,确定它的二进制表示中的第x位是0还是1

n: 0 1 1 0 1 0 1 0 0 1
结论:(n >> x) & 1

3.将一个数n的二进制表示的第x位修改成1

	0 1 1 0 1 0 1 0 0 1
|	0 0 0 0 0 1 0 0 0 0
->	0 1 1 0 1 1 1 0 0 1
结论:n |= (1 << x) 

4.将一个数n的二进制表示的第x位修改成0、

	0 1 1 0 1 0 1 0 0 1
&	1 1 1 1 0 1 1 1 1 1
->	0 1 1 0 0 1 1 0 0 1
结论:n &= (~(1 << x))

5. 位图的思想

本质:哈希表
【算法】常见位运算总结_第1张图片

6.提取一个数(n)二进制表示中最右侧的1

	0 1 1 0 1 0 1 0 0 0
~	1 0 0 1 0 1 0 1 1 1
+1	1 0 0 1 0 1 1 0 0 0
& 	0 1 1 0 1 0 1 0 0 0
	0 0 0 0 0 0 1 0 0 0
结论:n & -n

-n:本质就是将最右侧的1,左边的区域全部变成相反

7.干掉一个数(n)二进制表示中最右侧的1

	0 1 1 0 1 0 1 0 0 
& 	0 1 1 0 1 0 0 1 1 
	0 1 1 0 1 0 0 0 0 
结论:n & (n - 1)

(n - 1):将最右侧的1,右边的区域(包括1)全部变成相反

8.位运算的优先级

能加括号就加括号,最不容易出错!

9.异或(^运算的运算律)

1.a ^ 0 = a
2. a ^ a = 0
3. a ^ b ^ c = a ^ (b ^ c)

你可能感兴趣的:(一起学数据结构与算法系列,java)