Operadores lógicos a nivel de bits

Un recurso importante en programación es saber si un determinado número es par o impar. Una opción para poder resolverlo es dividir el número entre dos y quedarnos con su resto, o lo que es lo mismo, con el operador mod(%).

Pero vamos a plantear una alternativa empleando los operadores lógicos a nivel de bits. De esta manera evitaremos el uso de la división, siendo un código más eficiente.

Con las variables de tipo numérico podemos hacer operaciones de tipo bit a bit empleando unos operadores lógicos especiales, como son & (and), | (or), ^ (xor), ~ (not), <<, >> y >>> (bit shifting).

En este empleamos la opción &, donde el resultado será 1 si ambos bits de entrada son 1. Veamos un ejemplo para las combinaciones de los valores 0 y 1:

0 & 0 = 0;

0 & 1 = 0;

1 & 0 = 0;

1 & 1 = 1;

Cuando el último bit de un número acaba en uno, el número es impar y si no es par. Veamos los números enteros del 1 al 9 y su equivalencia en binario:

0 = 0000; Acaba en cero, es par.

1 = 0001; Acaba en uno, es impar.

2= 0010; Acaba en cero, es par.

3= 0011; Acaba en uno, es impar.

4 = 0100; Acaba en cero, es par.

5 = 0101; Acaba en uno, es impar.

6 = 0110; Acaba en cero, es par.

7 = 0111; Acaba en uno, es impar.

8 = 1000; Acaba en cero, es par.

9 = 1001; Acaba en uno, es impar.

Sabiendo esto, vamos ir realizando el & de un número cualquiera con el 1 que sabemos que es impar. Para el número 12, la operación es la siguiente:

12 en decimal = 1100 en binario

1 en decimal = 0001 en binario

12 & 1 decimal = 1100 & 0001 = (1&0)(1&0)(0&0)(0&1) = 0000 binario = 0 decimal. Como acaba en 0, 12 es par.

3 en decimal = 0011;

1 en decimal = 0001;

3 & 1 decimal = 0011 & 0001 = (0&0)(0&0)(1&0)(1&1) = 0001 binario = 1 decimal. Como acaba en 1, 3 es impar.

El código en Java queda de la siguiente manera:

Creamos una variable llamada miMascara que se debe inicializar en 1 o en 0, en este caso está en uno.

La variable comparación la declaramos para mayor claridad, aquí realizamos la operación & de miMascara con el número que queremos saber si es par o impar, el resultado será 1 o 0.

Es importante que nos fijemos que el 1 en binario es siempre un 1 por la derecha y todo ceros por la izquierda (estos no tienen valor), por lo que siempre que se realiza el operador &, el resultado sólo será cero cuando el último bit del número comparado sea cero.

Fuente:

foro.olimpiada-informatica.org

Wikipedia

recursostic