位运算各种方法总结

位运算

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

\quad \quad 现代计算机中,几乎都是二进制计算机(三进制计算机仅有少量),所有的数据都以二进制的形式存储在设备中。位运算就是直接对整数在内存中的二进制位进行操作,计算时将十进制转为 二进制,再进行计算。
\quad \quad 需要注意,位运算是针对 二进制 的运算,对每一个位进行布尔运算操作。所以 手动 进行 位运算计算 时,需要将数转换成二进制的表示形式,再进行计算。

1、按位与

\quad \quad 计算时将 十进制 转为 二进制 再进行计算,同位置为1,则结果为1,其余情况皆为0
位运算各种方法总结_第1张图片

  • 结论:n&(n-1) 会去除 n 的位级表示中最低的那一位 1。
  • 应用例题:二进制中1的个数

2、按位或

\quad \quad 对应位上有一个为1,结果就为1。两个都为0,结果才得0,类似加的关系。

位运算各种方法总结_第2张图片

3、按位取反

\quad \quad 对每一位进行取反操作,如果是1则结果为0,是0则结果为1。即为反码
位运算各种方法总结_第3张图片

4、按位异或

\quad \quad 当两个对应位不同时结果才为1,相同时得0.

位运算各种方法总结_第4张图片
性质:

  • 任何数和 0做异或运算,结果仍然是原来的数,即a⊕0=a。
    位运算各种方法总结_第5张图片

  • 任何数和其自身做异或运算,结果是 0,即 a⊕a=0。

位运算各种方法总结_第6张图片

  • 异或运算满足交换律和结合律,a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
    位运算各种方法总结_第7张图片

5、按位同或

\quad \quad 当两个对应位相同时结果才为1,不同时得0.

位运算各种方法总结_第8张图片

6、左移

\quad \quad 将二进制位上的数向左移动,右边补0.

位运算各种方法总结_第9张图片

7、带符号右移

\quad \quad 有符号整数最高位代表着数的正负,最高位为1代表负数,最高位为0代表正数。

\quad \quad 带符号右移是右移时,左边补充最高位上的值。位运算各种方法总结_第10张图片

8、无符号右移

\quad \quad 二进制上的数向右移动,右移时左边补0。

位运算各种方法总结_第11张图片

9、python实现各种位运算操作

位运算符 说明 使用形式
& 按位与 a&b
| 按位或 a|b
~ 按位取反 ~a
^ 按位异或 a^b
<< 按位左移 a<
>> 按位右移 a>>b
- 转换为负数 -a

10、位运算小技巧

1、获取二进制中最右边的1,且其它位置为0: X & (-X)

位运算各种方法总结_第12张图片
因此,x 和 −x 只有一个共同点:最右边的 1。这说明 x & (-x) 将保留最右边的 1。并将其他的位设置为 0。
位运算各种方法总结_第13张图片

2、将二进制中最右边的1置为0: X & (X - 1)

  • (x - 1) 代表了将 x 最右边的 1 设置为 0,并且将较低位设置为 1。

  • 再使用与运算:则 x 最右边的 1 和就会被设置为 0,因为 1 & 0 = 0。

位运算各种方法总结_第14张图片

11、应用

Leetcode之位运算

你可能感兴趣的:(数据结构与算法,#,算法,位运算,python)