Как снять левую часть двоичного числа в Python? - PullRequest
0 голосов
/ 26 ноября 2018

Я получил это двоичное число 101111111111000

Мне нужно убрать 8 самых значимых битов и получить 11111000 в конце.

Я попытался сделать 101111111111000 << 8,но это приводит к 10111111111100000000000, оно не имеет такого же эффекта, как >>, который удаляет младшие битыТак как это можно сделать?Окончательный результат ДОЛЖЕН БЫТЬ двоичного типа.

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Чтобы достичь этого для числа x с n цифрами, можно использовать это

x&(2**(len(bin(x))-2-8)-1)

-2 для полоски 0b, -8 для полоски слева

Проще говоря, это ands ваш номер с достаточным количеством 1 s, чтобы 8 крайних левых бит были установлены в 0.

0 голосов
/ 26 ноября 2018

другой общий способ сделать это:

n = int('101111111111000', 2) # 24568

n & (1 << int.bit_length(n) - 8) - 1

дает 120 (или 1111000)

0 голосов
/ 26 ноября 2018

Вы можете получить самые правые 8 битов целого числа n, используя поразрядно-и:

n&255

255 - сумма значений самых маленьких 8 битов.

Такначиная с 101111111111000, что составляет 24568 десятичных знаков, n&255 дает 11111000, что составляет 248 десятичных знаков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...