ASánchezDíaz

Autoaprendiendo .NET y otras cosas


Manual C# – Capítulo 1.4. Operadores II

Seguimos con el Manual de C#, en este capítulo, veremos los operadores lógicos de C#.

Sistema decimal y sistema binario
Antes de empezar, quizás sea conveniente tener una noción básica (muy básica) del sistema binario.

En nuestra vida cotidiana usamos el sistema decimal, un sistema de numeración compuesto de 10 símbolos ( 0,1,2,3,4,5,6,7,8 y 9 ). Se trata de un sistema de numeración posicional, donde el valor de cada dígito depende de su localización dentro del número, y se calcula usando potencias de 10. Por ejemplo:

El número 542 en notación decimal se puede obtener mediante la operación:

5 x 102 + 4 x 101 + 2 x 100

Es decir, el 2 que ocupa la primera posición se multiplica por la potencia 100 = 1, el 4 que ocupa el segundo lugar se multiplica por su correspondiente potencia 101 = 10 y el 5 que ocupa el tercer lugar se multiplica por 102 = 100. La suma de los tres términos 500 + 40 + 2 es representada por el número o cantidad 542.

En el sistema binario, tenemos sólo dos símbolos en lugar de los 10 del sistema decimal. Estos símbolos son el 0 y el 1. Es el sistema usado por los ordenadores, ya que se corresponde mejor con la realidad del funcionamiento de un ordenador, que trabaja con dos niveles de voltaje, representados con los números 0 y 1.

En el sistema binario, el número 0 se representa por 0, cómo era de suponer, el 1 se representa con el símbolo 1, el 2 se representa en la forma 10, el 3 se representa 11…

No nos vamos a extender mucho definiendo en más profundidad el sistema binario, aunque sí podemos realizar una conversión de un número decimal a binario y de binario a decimal:

Decimal a binario

Hay que dividir el número decimal entre 2, nos quedamos con la parte entera del resultado y anotamos el resto. Esta parte entera la volvemos a dividir entre 2, anotando también el resto y quedándonos con la parte entera del resultado… realizamos esta operación hasta que el resultado de la división sea 1 o el resultado sea menor que 2. Os pego un ejemplo extraído de la wikipedia:

Vamos a pasar el número 131 a binario

131 dividido entre 2 da 65 y el resto es igual a 1
65 dividido entre 2 da 32 y el resto es igual a 1
32 dividido entre 2 da 16 y el resto es igual a 0
16 dividido entre 2 da 8 y el resto es igual a 0
8 dividido entre 2 da 4 y el resto es igual a 0
4 dividido entre 2 da 2 y el resto es igual a 0
2 dividido entre 2 da 1 y el resto es igual a 0
1 dividido entre 2 da 0 y el resto es igual a 1
-> Ordenamos los restos, del último al primero: 10000011

Por lo que el número 131 en binario es 10000011

Si el número de partida tiene decimales, primero pasamos a binario su parte entera y nos quedamos con su parte decimal. Multiplicamos la parte decimal por 2. Si el resultado obtenido es mayor que 1 anotamos 1, y si por el contrario, es menor que 1 anotamos 0, es decir, nos quedamos con la parte entera del resultado y realizamos el proceso hasta que el número se convierta en periódico o la parte entera sea mayor o igual que 2:

0,3125 (decimal) => 0,0101 (binario).
Proceso:
0,3125 · 2 = 0,625 => 0
0,625 · 2 = 1,25 => 1
0,25 · 2 = 0,5 => 0
0,5 · 2 = 1 => 1
En orden: 0101 -> 0,0101 (binario)

Binario a decimal

Para convertir un número en formato binario a decimal, nos centramos en el dígito (bit) situado más a la derecha y numeramos de derecha a izquierda los dígitos, empezando por el 0:

1101101
1-1-0-1-1-0-1
6 5 4 3 2 1 0

Hecha esta operación, multiplicamos cada dígito por 2 elevado al índice según el puesto que ocupa el dígito:

1 x 26 + 1 x 25 + 0 x 24 + 1 x 23 + 1 x 22 + 0 x 21 + 1 x 20

=

1 x 64 + 1 x 32 + 0 x 16 + 1 x 8 + 1 x 4 + 0 x 2 + 1 x 1

=

64+32+0+8+4+0+1 = 109

Por lo que el número binario 1101101 en formato decimal se representa como 109

Si queréis ampliar esta información, podéis consultar en la wikipedia
Operadores Lógicos
Ahora que ya tenemos una noción básica del sistema binario, entramos a ver los operadores lógicos de C#. Estos operadores son &, ^ y |.

Estos operadores en C# se aplican a expresiones del tipo int o bool.
Operador &: se aplica a variables del tipo int o bool y realiza lo que se llama operación AND lógica.

Esta operación en el caso de dos expresiones del tipo bool devuelve true si ambas expresiones tienen el mismo valor y false si no es así:

true & true = true;
true & false = false;
false & true = false;
false & false = true;

Para valores del tipo int, el operador realiza la operación AND comparando bit a bit los dos valores:

7 & 5 = 5 (en decimal)
111 & 101 = 101 (en binario)

Lo que hace es comparar bit a bit:

111
101 (AND)
___
101

Operador |: realiza la operación OR
En el caso de expresiones del tipo bool, devuelve true si al menos una de las expresiones es true:

true | false = true;
true | true = true;
false | true = true;
false | false = false;

Para int, la operación OR bit a bit dará como resultado 1 si al menos uno de los bits evaluados es 1:

7 | 5 = 7 (en decimal)
111 | 101 = 101 (en binario)

Lo que hace es comparar bit a bit:

111
101 (OR)
___
111

Operador ^: realiza la operacion OR exclusiva.

En el caso de expresiones del tipo bool, devuelve true si exactamente una y sólo una de las expresiones es true:

true ^ false = true;
true ^ true = false;
false ^ true = true;
false ^ false = false;

Para int, la operación OR exclusiva bit a bit dará como resultado 1 si y sólo sí uno y sólo uno de los bits evaluados es 1:

7 ^ 5 = 2 (en decimal)
111 ^ 101 = 101 (en binario)

Lo que hace es comparar bit a bit de forma exclusiva:

111
101 (OR exclusiva)
___
010

En el siguiente capítulo hablaremos de los operadores lógicos condicionales: && y ||.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *