数据结构与算法|位运算各种方法总结


位运算

  • 1、按位与
  • 2、按位或
  • 3、按位取反
  • 4、按位异或
  • 5、按位同或
  • 6、左移
  • 7、带符号右移
  • 8、无符号右移
  • 9、python实现各种位运算操作
  • 10、位运算小技巧
  • 11、应用

\quad \quad 现代计算机中,几乎都是二进制计算机(三进制计算机仅有少量),所有的数据都以二进制的形式存储在设备中。位运算就是直接对整数在内存中的二进制位进行操作,计算时将十进制转为 二进制,再进行计算。
\quad \quad 需要注意,位运算是针对 二进制 的运算,对每一个位进行布尔运算操作。所以 手动 进行 位运算计算 时,需要将数转换成二进制的表示形式,再进行计算。
1、按位与 \quad \quad 计算时将 十进制 转为 二进制 再进行计算,同位置为1,则结果为1,其余情况皆为0
数据结构与算法|位运算各种方法总结
文章图片

  • 结论:n&(n-1) 会去除 n 的位级表示中最低的那一位 1。
  • 应用例题:二进制中1的个数
2、按位或 【数据结构与算法|位运算各种方法总结】 \quad \quad 对应位上有一个为1,结果就为1。两个都为0,结果才得0,类似加的关系。
数据结构与算法|位运算各种方法总结
文章图片

3、按位取反 \quad \quad 对每一位进行取反操作,如果是1则结果为0,是0则结果为1。即为反码
数据结构与算法|位运算各种方法总结
文章图片

4、按位异或 \quad \quad 当两个对应位不同时结果才为1,相同时得0.
数据结构与算法|位运算各种方法总结
文章图片

性质:
  • 任何数和 0做异或运算,结果仍然是原来的数,即a⊕0=a。
    数据结构与算法|位运算各种方法总结
    文章图片

  • 任何数和其自身做异或运算,结果是 0,即 a⊕a=0。
数据结构与算法|位运算各种方法总结
文章图片

  • 异或运算满足交换律和结合律,a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
    数据结构与算法|位运算各种方法总结
    文章图片
5、按位同或 \quad \quad 当两个对应位相同时结果才为1,不同时得0.
数据结构与算法|位运算各种方法总结
文章图片

6、左移 \quad \quad 将二进制位上的数向左移动,右边补0.
数据结构与算法|位运算各种方法总结
文章图片

7、带符号右移 \quad \quad 有符号整数最高位代表着数的正负,最高位为1代表负数,最高位为0代表正数。
\quad \quad 带符号右移是右移时,左边补充最高位上的值。数据结构与算法|位运算各种方法总结
文章图片

8、无符号右移 \quad \quad 二进制上的数向右移动,右移时左边补0。
数据结构与算法|位运算各种方法总结
文章图片

9、python实现各种位运算操作
位运算符 说明 使用形式
& 按位与 a&b
| 按位或 a|b
~ 按位取反 ~a
^ 按位异或 a^b
<< 按位左移 a<
>> 按位右移 a>>b
- 转换为负数 -a
10、位运算小技巧 1、获取二进制中最右边的1,且其它位置为0: X & (-X)
数据结构与算法|位运算各种方法总结
文章图片

因此,x 和 ?x 只有一个共同点:最右边的 1。这说明 x & (-x) 将保留最右边的 1。并将其他的位设置为 0。
数据结构与算法|位运算各种方法总结
文章图片

2、将二进制中最右边的1置为0: X & (X - 1)
  • (x - 1) 代表了将 x 最右边的 1 设置为 0,并且将较低位设置为 1。
  • 再使用与运算:则 x 最右边的 1 和就会被设置为 0,因为 1 & 0 = 0。
数据结构与算法|位运算各种方法总结
文章图片

11、应用 Leetcode之位运算

    推荐阅读