Vamos a programar #101 - Operaciones a nivel de bits en Python y tablas de verdad.
Hola de nuevo a todos, el día de hoy vamos a ver mas operaciones a nivel de bits.
Hace algunos días alguien me pregunto que si era posible usar operaciones a nivel de bits en Python, la respuesta sencilla es: si. Pero ¿Cómo es que trabaja cada una y cuales son las que están disponibles? Anteriormente vimos cómo es posible usarlos en C# y si bien son esencialmente lo mismo, vale la pena revisarlas por separado. En este post veremos las operaciones disponibles SOLO para Python.
En Python disponemos de las siguientes operaciones:
- Or (o) "|"
- XOr (o exclusivo) "^"
- And (y) "&"
- Shift left (desplazamiento a la izquierda) "<<"
- Shift right (desplazamiento a la derecha) ">>"
- Not (inverso) "~"
Or "|"
El operador "|" aplica la operación O entre dos números, hay que recordar las tablas de verdad y recordar que que se produce un valor verdadero cuando uno u otro de los valores son verdaderos.
- Verdadero O Verdadero = Verdadero
- Verdadero O Falso = Verdadero
- Falso O Verdadero = Verdadero
- Falso O Falso = Falso
- 1|1 = 1
- 1|0 = 1
- 0|1 = 1
- 0|0 = 0
XOr "^"
El operador "^" aplica la operación O Exclusiva a dos números, de nueva cuenta, tomado las tablas de verdad tenemos:
- Verdadero OEx Verdadero = Falso
- Verdadero OEx Falso = Verdadero
- Falso OEx Verdadero = Verdadero
- Falso OEx Falso = Falso
Que es lo mismo:
- 1^1 = 0
- 1^0 = 1
- 0^1 = 1
- 0^0 = 0
And "&"
El operador "&" aplica la operación Y a dos números y tiene una tabla de verdad como la que sigue:
- Verdadero Y Verdadero = Verdadero
- Verdadero Y Falso = Falso
- Falso Y Verdadero = Falso
- Falso Y Falso = Falso
Que es lo mismo:
- 1&1 = 1
- 1&0 = 0
- 0&1 = 0
- 0&0 = 0
Shift Left "<<"
El operador "<<" mueve a la izquierda una secuencia de bits tantas veces como el número del lado derecho del operador lo indique.
Para que quede un poco mas claro, tomemos como ejemplo el número 76 decimal, cuya representación en binario es 1001100 y lo queremos desplazar a la izquierda dos lugares, entonces tenemos:
- 76 << 2 = 304
- 1001100 << 10 = 100110000
MiNum = 76 print (MiNum) print("{:b}".format(MiNum)) MiNum <<= 0b10 print(MiNum) print("{:b}".format(MiNum))
Shift Right ">>"
El operador ">>" mueve a la derecha una secuencia de bits tantas veces como el número del lado derecho del operador lo indique.
Retomado número 76 pero ahora supongamos que los queremos desplazar cuatro lugares a la derecha, entonces tenemos:
- 76 >> 4 = 4
- 1001100 >> 100 = 100
MiNum = 76 print (MiNum) print("{:b}".format(MiNum)) MiNum >>= 0b100 print(MiNum) print("{:b}".format(MiNum))
Not "~"
El operador "~" simplemente invierte una secuencia de bits, hay que tomar en cuenta que numero estamos usando, y dependiendo del mismo, Python usará mas o menos bits para guardarlo en memoria, pero además hay que tener en cuenta que al aplicar el operador a números con signo (y no digo -1 o algo por el estilo, sino a los números enteros con signo donde un byte se utiliza para indicar si el número es negativo o no) este invertirá toda la secuencia por lo que si esperamos que; por ejemplo; 10 en binario lo invierta en 01 no será así.
Para apreciar un poco más lo que sucede, tomemos el número entero de 8 bits 127, cuya representación en binario es 01111111 y es importante considerar el cero a la izquierda, ya que este nos dice que es un número positivo; al aplicar el operador ~ tenemos la secuencia de bits 10000000 que representa al número decimal -128.
Y bien, por ahora es todo, en el siguiente post veremos algunos ejemplos de la vida real en donde saber usar la operaciones a nivel de bits es de mucha ayuda.
Los leo luego
No hay comentarios.