2015-11-09 2 views
3

У меня есть целое число, которое я знаю, что оно находится между 0 и 15, то есть может быть выражено в 4 бита. Я хотел бы получить представление битов этого массива в виде булева массива, то есть,Преобразование 4-разрядного целого в логический список

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

Как лучше достичь этого?

ответ

8

Через форматирования, как в двоичном:

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]), так как строка форматирования форматирует число способ, которым мы его читаем, - самый старший бит сначала, тогда как вопрос задал биты в младшем значении бит первого порядка.

+1

Не могли бы вы объяснить, почему вы используете :: - 1 в своем заявлении о возврате? – xXliolauXx

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

ли вы попробовать свой собственный код? –

+0

Да, я проверил его. –

+1

Вы все равно должны это проверить; он работает не очень хорошо, даже с приведенным здесь примером; вам нужно вернуть 4 бита, а с помощью 'x = 7' вы возвращаете только три бита. –

0

Попробуйте это:

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) 
0
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] 
Смежные вопросы