Lo que tu quieres hacer es:
o
Ok vamos a analizar por que:
AND siempre es falso, a menos que ambos lados sean verdadero.
OR siempre es verdadero, a menos que ambos lados sean falsos.
Entonces para limpiar (o poner a cero) un bit lo mas conveniente sería usar un AND, si tenemos un 0 en el AND ya no nos importa cual sea el otro valor, el resultado va a ser 0. Esto se llama short circuit en los operadores booleanos.
Ejemplo:
Código:
c = 5
101 <-- c
& 110
------
100
Entonces ¿como podemos hacer esto?
La solución mas directa es usar desplazamiento de carro.
Código:
>>> c = 101
101
>>> c = c << 1
10
>>> c = c >> 1
100
Otra solución seria poner todos los bits a 1 con excepción del primero y hacer un AND. Esto es un valor "mágico". El cual sucede que es -2, ver complemento 2 para entender esto.