Я получил это двоичное число 101111111111000
101111111111000
Мне нужно убрать 8 самых значимых битов и получить 11111000 в конце.
11111000
Я попытался сделать 101111111111000 << 8,но это приводит к 10111111111100000000000, оно не имеет такого же эффекта, как >>, который удаляет младшие битыТак как это можно сделать?Окончательный результат ДОЛЖЕН БЫТЬ двоичного типа.
101111111111000 << 8
10111111111100000000000
>>
Чтобы достичь этого для числа x с n цифрами, можно использовать это
x
n
x&(2**(len(bin(x))-2-8)-1)
-2 для полоски 0b, -8 для полоски слева
Проще говоря, это ands ваш номер с достаточным количеством 1 s, чтобы 8 крайних левых бит были установлены в 0.
ands
1
другой общий способ сделать это:
n = int('101111111111000', 2) # 24568 n & (1 << int.bit_length(n) - 8) - 1
дает 120 (или 1111000)
1111000
Вы можете получить самые правые 8 битов целого числа n, используя поразрядно-и:
n&255
255 - сумма значений самых маленьких 8 битов.
Такначиная с 101111111111000, что составляет 24568 десятичных знаков, n&255 дает 11111000, что составляет 248 десятичных знаков.