Por @Alvy — 18 de Enero de 2020

int x; // we want to find the minimum of x and y
int y;
int r; // the result goes here

r = y ^ ((x ^ y) & -(x < y)); // min(x, y)

En la página Bit Twiddling Hacks hay una estupenda, antigua y esotérica recopilación de operaciones a nivel de bits para llevar a cabo todo tipo de funciones con valores numéricos de forma conveniente.

Quien dice «conveniente» dice «de forma óptima» porque por lo general estas opciones requieren menos pasos y son más rápidas, o evitan ciertas operaciones de los procesadores (como las bifurcaciones) que pueden añadir ciclos y resultar más lentas. Entre otros hay trucos para calcular rápidamente si un valor es potencia de 2, calcular la paridad o intercambiar dos valores.

Los trucos consisten en mover bits, utilizar operaciones como AND, NOT, OR y XOR, cálculos aritméticos e incluso realizar cambios de tipos (enteros con signo, sin signo o números de coma flotante) dependiendo de lo que haga falta. La notación que se utiliza es la del lenguaje C.

A modo de ejemplo, con el código que encabeza esta anotación se puede obtener el número más bajo de dos posibles valores (x e y) sin utilizar una bifurcación.

Aunque la página es muy antigua parece que el autor acepta colaboraciones y también que le avisen de los bugs si los hubiera. Eso sí, también recuerda a quien vaya a usarlo que al ser un código rarito y en ocasiones difícil de entender no se hace responsable de nada. De hecho o se documenta bien con comentarios o si otra persona tiene que leer el código para entender qué hace puede ser toda una aventura.

(Vía Hack-a-day.)

Relacionado:

Compartir en Flipboard Publicar / Tuitear