Si se quiere desactivar el bit menos significativo otra opción es obtener la mascara mediante el operador de complemento a uno con la ventaja de no necesitar la inclusión de <limits.h>:
Un saludo
Para los que no entienden el "~1":
Dado el hecho de que ~ invierte los bits (es la función inversa o complementaria en matemáticas) así:
~1001 pasa a ser 0110, ~1111 pasa a ser 0000, etc.
Entonces, sabiendo que "1" se representa así en binario:
0000 0000 | 0000 0000 | 0000 0000 | 0000 0001
(he separado los bits para que se lean fácilmente)
Su complemento es:
1111 1111 | 1111 1111 | 1111 1111 | 1111 1110
Entonces, [cualquier número] AND [máscara] es:
1101001010011011001101110001101
AND
1111111111111111111111111111110
----------------------------------------------------
1101001010011011001101110001100
Eliminando así el bit menos significativo, y haciendo que el número sea par.