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.
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. |