将 4 位整数转换为布尔列表

Convert 4-bit integer into Boolean list

我有一个整数,我知道它在 0 到 15 之间,即可以用 4 位表示。我想将该数组的位表示形式作为布尔数组,即

0: [False, False, False, False],
1: [True, False, False, False],
2: [False, True, False, False],
# [...]
15: [True, True, True, True]

我怎样才能最好地做到这一点?

x = 7
strBin = str(bin(x))
lsBoolVal = [i == '1' for i in strBin[2:].zfill(4)]

通过格式化为二进制:

def int_to_bool_list(num):
   bin_string = format(num, '04b')
   return [x == '1' for x in bin_string[::-1]]

或按位与:

def int_to_bool_list(num):
    return [bool(num & (1<<n)) for n in range(4)]

第一个函数要求将 bin_string 的内容反转(使​​用 [::-1]),因为字符串格式按照我们阅读的方式格式化数字 - 最高有效位在前,而问题要求的是最低有效位第一顺序的位。

试试看:

Bitmasks = []
Bitmasks.append(int("0001", 2))
Bitmasks.append(int("0010", 2))
Bitmasks.append(int("0100", 2))
Bitmasks.append(int("1000", 2))

myNumber = 12
Bools = []
for bm in Bitmasks:
    Bools.append(myNumber|bm==myNumber)
R = 16
list = []
print bin(R)[2:]
for i in bin(R)[2:]:
    if (i=="1"):
        list.append(True)
    else:    
        list.append(False)


print list

output-click here

[True, False, False, False, False]

有列表理解:

my_int = 3
[b == '1' for b in bin(my_int)[2:].rjust(4)[::-1]]  # Convert, pad and reverse

输出:

[True, True, False, False]
   1     2     4      8     = 3