Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/06/2012, 20:54
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: operadores logicos

Lo que tu quieres hacer es:
Código Python:
Ver original
  1. c &= -2 # Convertir c a par
o
Código Python:
Ver original
  1. c <<= 1
  2. c >>= 1

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.