En números como 16, realizar un bit AND en todos los números desde 1 hasta 15 da el resultado 0. Quiero averiguar el primer número que no da 0 cuando se ejecuta bitwise AND en él.

TLDR: encuentre el x más pequeño de modo que x AND y ! = 0

y se da

-1
NePtUnE 10 may. 2020 a las 12:24

3 respuestas

La mejor respuesta

La solución es encontrar el primer bit desde la derecha, que es 1. Por ejemplo,

y = 16 = 0b10000
           ^
y = 12 = 0b1100
            ^
def get_x(y):
    i = 0
    while True:
        if (y >> i) & 1 == 1:
            break
        i += 1
    return 1 << i
0
yhokazon 10 may. 2020 a las 09:41

Puedes hacer un enfoque de fuerza bruta:

while True:
    y=int(input('y='))
    x=1
    while True:
        if(x & y !=0):
            print(x)
            break
        x*=2
1
Grzegorz Skibinski 10 may. 2020 a las 09:37

Esto parece más inteligente.

def get_x(y):
    return y & (-y)

Encuentra el bit de ajuste más bajo

0
yhokazon 10 may. 2020 a las 13:40