当前位置: 首页 > 面试题库 >

Python-按位操作和用法

阎星河
2023-03-14
问题内容

考虑以下代码:

x = 1        # 0001
x << 2       # Shift left 2 bits: 0100
# Result: 4

x | 2        # Bitwise OR: 0011
# Result: 3

x & 1        # Bitwise AND: 0001
# Result: 1

我可以用Python(和其他语言)理解算术运算符,但我对“按位”运算符却不太了解。在上面的示例(来自Python书)中,我了解了左移功能,但不了解其他两个。

另外,按位运算符实际上是用来做什么的?我会喜欢一些例子。


问题答案:

按位运算符是对多位值进行操作的运算符,但在概念上一次只能处理一位。

  • AND仅当其两个输入均为1时,才为1;否则为0。
  • OR如果其输入之一或全部为1,则为1,否则为0。
  • XOR仅当其输入之一恰好为1时为1,否则为0。
  • NOT 仅当输入为0时为1,否则为0。

这些通常可以最好地显示为真值表。输入的可能性在顶部和左侧,结果位是在输入的交点处显示的四个值之一(如果不是,则为两个,因为它只有一个输入)。

AND | 0 1     OR | 0 1     XOR | 0 1    NOT | 0 1
----+-----    ---+----     ----+----    ----+----
 0  | 0 0      0 | 0 1       0 | 0 1        | 1 0
 1  | 0 1      1 | 1 1       1 | 1 0

一个示例是,如果你只想要整数的低4位,则将其与15(二进制1111)进行与,则:

    201: 1100 1001
AND  15: 0000 1111
------------------
 IS   9  0000 1001

在那种情况下,15中的零位有效地充当了过滤器,迫使结果中的位也为零。

另外,>><<通常作为按位运算符包括在内,它们分别将值“左”右移和左移一定数量的比特,丢掉将要移向的端点的比特,并在该比特处输入零。另一端。

因此,例如:

1001 0101 >> 2 gives 0010 0101
1111 1111 << 4 gives 1111 0000

请注意,Python中的左移是不寻常的,因为它没有使用固定的宽度来丢弃位-虽然许多语言根据数据类型使用固定的宽度,但是Python只是扩展宽度以迎合额外的位。为了获得Python中的丢弃行为,你可以按位向左移动,and例如在8位值中向左移动四位:

bits8 = (bits8 << 4) & 255

考虑到这一点,位运算符的另一个例子是,如果你有两个4位值要打包成一个8位的一个,你可以使用所有这三个操作员的(left-shiftandor):

packed_val = ((val1 & 15) << 4) | (val2 & 15)
  • 该& 15操作将确保两个值仅具有低4位。
  • << 4是一个4位左移位移动val1进入前的8位值的4位。
  • 在|简单地结合了这两者结合起来。

如果val1为7且val2为4:

                val1            val2
                ====            ====
 & 15 (and)   xxxx-0111       xxxx-0100  & 15
 << 4 (left)  0111-0000           |
                  |               |
                  +-------+-------+
                          |
| (or)                0111-0100


 类似资料:
  • 我目前正在处理Java 8中使用Lambdas进行按位操作的循环转换问题。 给定一组复杂的条目,循环需要遍历所有条目并对它们调用给定的方法(方法返回布尔值)。之后,返回结果。 谢谢!

  • 本文向大家介绍python selenium xpath定位操作,包括了python selenium xpath定位操作的使用技巧和注意事项,需要的朋友参考一下 xpath是一种在xm文档中定位的语言,详细简介,请自行参照百度百科,本文主要总结一下xpath的使用方法,个人看法,如有不足和错误,敬请指出。 注意:xpath的定位 同一级别的多个标签 索引从1开始 而不是0 1. 绝对定位: 此方

  • 我正在用java做一些位操作 我有2个阵列: 然后我尝试中的一个字节,中的一个字节。 问题是我遇到了一个编译器错误。 “错误可能丢失精度”所需字节已找到int 问题是我如何修复它?

  • 通过np.bitwise_and()函数对输入数组中的整数的二进制表示的相应位执行位与运算。 例子 输出如下: 13 和 17 的二进制形式: 0b1101 0b10001 13 和 17 的位与: 1 你可以使用下表验证此输出。 考虑下面的位与真值表。 通过np.bitwise_or()函数对输入数组中的整数的二进制表示的相应位执行位或运算。 import numpy as np a,b = 1

  • 求子集[M]

  • 我在mysql表中有一个int列,用于存储与状态相关的位。我对基于状态字段中是否设置了一个或多个位的查询感兴趣。 我尝试了以下方法: