python - 位掩码在 Python 中如何工作?

标签 python

您好,我编写了一个程序来查看类里面某个位是否“打开”,但我不太确定“打开”和“关闭”意味着什么,以及位掩码如何工作。

代码如下:

def check_bit4(input):
    mask = 0b1000
    checker = input & mask
    if checker > 0:
        return("on")
    else:
        return("off")

谢谢!

最佳答案

计算机用位来表示整数。这是数字的二进制表示形式(即使用基数 2)。二进制中唯一的数字是 0 和 1,或者“关”和“开”。如果您不熟悉二进制,您应该阅读它,但基本上您可以这样计算二进制:

0000
0001
0010
0011
0100
0101
0110

依此类推...每一列都可以用从0开始的2^n表示。所以数字0101 = 2^3*0+2^2*1+2 ^1*0+2^0*1 = 5。现在,当您“位屏蔽”某些东西时,您基本上只是在查看对您有值(value)的位。在您的情况下,您只查看“2^3”位。只需将每个位与掩码中的相应位相乘即可轻松完成此操作。这对很多事情都有用。有时我们为每一位赋予含义,并且判断它是打开还是关闭非常重要。

在你的例子中。如果我们传入 13,就会发生这种情况:

13 means 1101 in computer speak
1101 mask with 1000.  Work on each bit individually:
1 * 1 = 1
1 * 0 = 0
0 * 0 = 0
1 * 0 = 0
checker = 1000 which means 8.
8 > 0 so return on.

使用 5 返回 false 的示例:

5 means 0101 in computer speak
0101 mask with 1000.  Work on each bit individually:
0 * 1 = 0
1 * 0 = 0
0 * 0 = 0
1 * 0 = 0
checker = 0000 which means 0.
0 is not > 0 so return off.

希望这有帮助。您应该能够在 Google 机器上找到有关此内容的大量信息。

关于python - 位掩码在 Python 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38235892/

相关文章:

python - Cython 函数返回没有 GIL 错误的指针

python - 为什么这个 numba 代码比 numpy 代码慢 6 倍?

python - PyGObject:Gtk.固定 Z 顺序

python - 从pyspark DataFrame中提取数据

python - 在 Pandas 的数据框中聚合列表

python - 如何纠正python错误: "icon object is not callable"?

python - scrapy-splash 返回它自己的标题而不是网站的原始标题

python - split:更快地找到元素的方法?

python - Tkinter 可调整大小的对象 Python Canvas

类工厂/选择器的 python rtype 文档字符串/重组文本