Ir al contenido principal

Python: Operadores ...

En la entrada anterior, hablamos acerca de tres tipos básicos de variables en Python. En esta entrada veremos diferentes tipos de operadores que podemos utilizar...

Operadores aritméticos:


Veamos los operadores que podemos utilizar con nuestras variables o expresiones numéricas directamente desde el intérprete mediante ejemplos en print así puedan ir viendo los resultados:



Operadores lógicos:

Al igual que lo hicimos para los aritméticos, veamos los operadores lógicos en el intérprete mostrando los resultados de algunos ejemplos:


En caso de no saber álgebra de Bool y/o lógica proposicional, recomiendo visitar las entradas correspondientes para poder sacar el máximo provecho a estos operadores y entender los resultados que nos devuelven.

Operadores relacionales:


Los operadores relacionales utilizados en expresiones devuelven como resultado datos booleanos.

Para los ejemplos del intérprete declararemos al inicio dos variables numéricas y mediante los operadores relacionales devolveremos los resultados booleanos de las expresiones:



Operadores a nivel de bit:


Estos operadores actúan sobre la representación en binario de los dos operandos a los que se aplican.

*Entre estos tenemos el operador & , que sería un and bit a bit, devolviendo 1 si en ese bit ambos números tienen un 1 y 0 en caso contrario.

Veamos un ejemplo:


Expliquemos un poco este resultado para que se entienda, a es el número entero 5, en binario 101 y b es 7, en binario 111. El & compara bit a bit por lo que comparará el primer bit de los dos (1 y 1), el segundo de los dos (0 y 1) y finalmente el tercero de los dos (1 y 1). Estas tres comparaciones tienen como resultado: 1 la primera, 0 la segunda y 1 la tercera. Si juntamos los 3 resultados tenemos 101 que es el entero 5.

*También tenemos el operador | , un or bit a bit. Veamos el ejemplo anterior con este nuevo operador:


Analicemos el resultado: nuevamente tenemos 101 y 111, se evalúa bit a bit de la siguiente manera: (1 ó 1), (0 ó 1) y (1 ó 1) , obteniendo como resultado 111 que equivale a 7 en el sistema de numeración decimal.

* Como variante del or bit a bit, tenemos el xor bit a bit para el cual utilizaremos el operador ^. Este sería un or excluyente si recordamos un poco de lógica proposicional. Vamos al ejemplo:


Esta vez al hacer (1 xor 1), (0 xor 1) y (1 xor 1) obtenemos como resultado 010 que equivale a 2.

* También tenemos el operador ~ que corresponde a un not bit a bit, éste niega invierte los bits del operando. Si lo utilizamos con el a de los ejemplos anteriores:


* Por último tenemos los operadores de desplazamiento << y >> que sirven para desplazar los bits n posiciones a la izquierda o a la derecha respectivamente.


Donde tenemos 101 , si desplazamos esos bits a la izquierda 2 posiciones, debemos agregar 2 ceros al final con lo que tendríamos 10100 que es equivalente a 20.

Mientras que si los desplazamos a la derecha:



Espero que les sirva la explicación y ya nos veremos en próximas entradas para continuar nuestro viaje por Python.


Comentarios

Entradas populares de este blog

C: Conversiones de tipo (casting) en C...

El casting o simplemente cast  nos permite hacer una conversión explícita de un tipo de dato a otro, a criterio del programador siempre y cuando estos tipos sean compatibles. Este cast se realiza a través de un operador de conversión de tipos (type casting operator) y es un recurso a tener en cuenta ya que hay situaciones en que nos puede resultar de gran utilidad. Hacer uso de un cast es tan sencillo como poner (tipo de dato)  delante de la expresión o variable a convertir. Veamos un ejemplo: Declaramos una variable de tipo int con un identificador tan creativo como "a" y le realizamos diferentes cast a a para mostrarlo como si fuera un float, un double y un char en un printf. Lo que obtendríamos en pantalla sería lo siguiente: Donde tenemos el valor de nuestro a, a convertido en float y double (mostrándolo con 3 cifras decimales) y a convertido en char. Si vemos este último caso, al hacer la conversión de "a" a char toma a como el código ascii de

C: Ejemplos: Congruencia de Zeller (nivel básico) ...

La Congruencia de Zeller es un algoritmo que se atribuye al matemático alemán Julius Christian Johannes Zeller que vivió en el siglo XIX. Este algoritmo nos permite determinar el día de la semana que le corresponde a una fecha determinada del calendario Gregoriano. La fórmula que nosotros usaremos (con algunas modificaciones respecto de la original para poder usarla en  informática) es la siguiente: Donde h es el día de la semana (entre 0 y 6), J es año/100 (la centuria) y K es año mod 100 (el año de la centuria). Y hay que tener en cuenta que los meses de enero y febrero cuentan como el mes 13 y 14 del año anterior. Ahora que tenemos la fórmula, programemos el algoritmo en C mediante el uso de una función: Analicemos el código paso a paso: Tenemos en cuenta el caso de enero y febrero: Dijimos que estos meses corresponden a los meses 13 y 14 del año anterior por lo que los asignamos como corresponde (mes + 12 , que dará 13 para enero y 14 para febrero) y le rest

Algoritmos: Resolución de problemas y refinamientos en pseudocódigo...

En otras entradas, vimos las partes que debe tener nuestro algoritmo en pseudocódigo y las estructuras que utilizaremos para resolverlo. Ahora llega el turno de implementar todo en conjunto para dar origen a nuestra creación. Pero ¿cómo resolvemos un problema así? Para hacerlo, utilizaremos lo que llamamos refinamientos sucesivos. Este concepto consiste en dividir el problema en subproblemas más pequeños y a estos, a su vez, en otros más pequeños; y así sucesivamente hasta que la solución de los últimos sea trivial, sencillo de resolver. Luego usaremos todas las soluciones obtenidas para armar la solución de nuestro problema mayor. Este principio, tiene base en parte de la técnica divide and conquer (dependiendo de la traducción: "divide y vencerás") que es una de las muchas técnicas de resolución de algoritmos existentes. Como vemos, al dividir el problema en otros más pequeños y más fáciles de resolver, podemos pasar de un problema complicado a uno cuya solución es much