Вместо использования сдвига битов может быть проще просто сложить вместе соответствующие степени двух.Скажем, вы хотите, чтобы восьмой-двенадцатый младшие биты.Затем вы должны сделать
>>> i = 8
>>> j = 12
>>> mask = sum(2**x for x in range(i-1, j-1))
>>> bin(mask)
'0b11110000000'
И затем вы можете использовать это, чтобы замаскировать действительные числа:
>>> num = 0b110100111100001101100110101
^^^^
>>> bin(num & mask)
'0b1100000000'
^^^
Начальный 0
, конечно, опущен