2016-03-21 18 views
2

Я хочу, чтобы получить последний п бит числа, например:Как получить последний n бит бит-op?

num = 0b111111111 
# if I want to get last 8 bits, it will be 0b11111111 
# if I want to get last 2 bits, it will be 0b11 

Я думал, что это может быть в порядке:

bits = 1 << n 
little = num & (~bits) 

, но это не так, если п = 8, то получить 0b110111111

+0

Вы не можете получить правильное значение, если оно не имеет фиксированного номера длины ('num'), Try:' new_num = bin (int (num)) [2:]. Zfill (32) 'для 32-битных чисел (без знака). Теперь можно сыграть с номером: 'print new_num [-15: -3]' равно '000000111111' (или наоборот для положительного индекса) – dsgdfg

ответ

0

Это один должен работать:

mask = (1 << n) - 1 
little = num & mask 

1 сдвигается влево на n добавляет n нулевые биты после 1:

>>> bin(0b1 << 4) 
'0b10000' 

Если вычесть 1 из этого, вы будете иметь маску, которая имеет n последние биты набор:

>>> bin((0b1 << 4) - 1) 
'0b1111' 
1

Используйте bits - 1:

>>> num = 0b111111111 
>>> n = 8 
>>> bits = 1 << n 
>>> num & (bits - 1) # bits - 1 => 0b1111111 because bits is 0b100000000 
255 
>>> bin(num & (bits - 1)) 
'0b11111111' 
Смежные вопросы