Operaciones de enteros a nivel de bit

Estas funciones permiten manipular los enteros como patrones de bits que representan valores en complemento a dos, donde la posición del bit N tiene la ponderación 2**N. Los bits se numeran de 0 en adelante. Estas operaciones actúan como si el bit de signo de un entero se extendiera indefinidamente hacia la izquierda. Así, por encima de su bit más significativo, un entero positivo tiene 0 bits y un entero negativo tiene 1 bit.

Tabla 1. Operaciones de enteros bit a bit de CLEM
Función Resultado Descripción
~~ ENT1 Entero Genera el complemento a nivel de bit del entero ENT1. Es decir, hay un 1 en el resultado de cada posición de bits para la que ENT1 tiene 0. Siempre es verdadero que ~~ ENT = (ENT + 1).
ENT1 || ENT2 Entero El resultado de esta operación es el "o inclusivo" a nivel de bit de ENT1 y ENT2. Es decir, hay un 1 en el resultado de cada posición de bits para la que hay un 1 en ENT1 o ENT2, o en ambos.
ENT1 ||/& ENT2 Entero El resultado de esta operación es el "o exclusivo" a nivel de bit de ENT1 y ENT2. Es decir, hay un 1 en el resultado de cada posición de bits para la que hay un 1 en ENT1 o ENT2, pero no en ambos.
ENT1 && ENT2 Entero Genera el "y" a nivel de bit de los enteros ENT1 y ENT2. Es decir, hay un 1 en el resultado de cada posición de bits para la que hay un 1 en ENT1 y ENT2.
ENT1 &&~~ ENT2 Entero Genera el "y" a nivel de bit de ENT1 y el complemento a nivel de bit de ENT2. Es decir, hay un 1 en el resultado de cada posición de bits para la que hay un 1 en ENT1 y un 0 en ENT2. Es lo mismo que ENT1 && (~~ENT2) y resulta útil para borrar bits de ENT1 definidos en ENT2.
ENT << N Entero Genera el patrón de bits de ENT1 desplazado a la izquierda N posiciones. Un valor negativo para N genera un desplazamiento a la derecha.
ENT >> N Entero Genera el patrón de bits de ENT1 desplazado a la derecha N posiciones. Un valor negativo para N genera un desplazamiento a la izquierda.
ENT1 &&=_0 ENT2 Booleana Equivalente a la expresión booleana ENT1 && ENT2 /== 0, pero es más eficaz.
ENT1 &&/=_0 ENT2 Booleana Equivalente a la expresión booleana ENT1 && ENT2 == 0, pero es más eficaz.
integer_bitcount(ENT) Entero Cuenta el número de 1 o 0 bits en la representación en complemento a dos de ENT. Si ENT no es negativo, N es el número de 1 bits. Si ENT es negativo, es el número de bits 0. Debido a la extensión del signo, hay un número infinito de bits 0 en un entero no negativo, o de bits 1 en un entero negativo. Siempre se da el caso de que integer_bitcount(ENT) = integer_bitcount(-(ENT+1)).
integer_leastbit(ENT) Entero Devuelve la posición de bit N del bit menos significativo establecido en el entero INT. N es la potencia más alta de 2 por la que INT tiene una división exacta.
integer_length(ENT) Entero Devuelve la longitud en bits de ENT como un entero en complemento a dos. Esto es, N es el entero más pequeño, de modo que ENT < (1 << N) si ENT >= 0 ENT >= (–1 << N) si ENT < 0. Si ENT no es negativo, la representación de ENT como un entero sin signo requiere un campo de al menos N bits. También se requiere un mínimo de N+1 bits para representar ENT como un entero con signo, independientemente de su signo.
testbit(ENT, N) Booleana Comprueba el bit situado en la posición N del entero ENT y devuelve el estado del bit N como un valor booleano, que es verdadero para 1 y falso para 0.