编程语言
首页 > 编程语言> > python在位掩码中找到1

python在位掩码中找到1

作者:互联网

我有许多节点可以分组,以通过位掩码响应命令.例如:NodeA在第1组和第5组中.当询问它属于哪个组时,它会回答其中17个二进制等效项为“0b10001”.组2,7和9中的节点会告诉我它属于组322(‘0b101000010’).我需要一种方法向用户显示指定节点所属的组.有16组可能.如果二进制文件不是16个字符长,我的代码将给出一个’字符串索引超出范围’错误.我知道有更好的方法:

def xref(grp):
    a = bin(grp)
    d = str(a)
    if d[-1] == '1':
        print "Group 1"
    if d[-2] == '1':
        print "Group 2"
    if d[-3] == '1':
        print "Group 3"
repeat for 16 groups

解决方法:

你只需要使用一些基本的bitwise operators.

这是一个例子:

def findbits(num):
  for i in range(16):
    if num & 1 << i:
      print("Group {0}".format(i + 1))

结果如下:

>>> findbits(0b10001) 
Group 1
Group 5

>>> findbits(0b10100010)
Group 2
Group 6
Group 8

>>> findbits(0b101000010)
Group 2 
Group 7 
Group 9

这样做是循环通过您想要查看的16位.

> 1<<我将数字1移位i比特,例如1<< 4将是0b10000
> num&无论是否为按位 – 如果两个操作数的位为1,则该数字的每个位都设置为1.

那么这样做是将您的值与0b1,0b10,0b100等进行比较.

标签:bitmask,python
来源: https://codeday.me/bug/20190824/1703485.html