Operações de número inteiro bit a bit

Essas funções permitem que números inteiros sejam manipulados como padrões de bits representando valores de dois complementos, em que a posição de bit N tem um peso 2**N.

Bits são numerados de 0 para cima. Essas operações agem como se o bit de sinal de um número inteiro fosse estendido indefinidamente para a esquerda. Assim, em qualquer lugar acima de seu bit mais significativo, um número inteiro positivo tem 0 bit e um número inteiro negativo tem 1 bit.

Tabela 1. Operações de número inteiro bit a bit do CLEM
Função Resultado Descrição
~~ INT1 Número inteiro Produz o complemento bit a bit do número inteiro INT1. Ou seja, há um 1 no resultado para cada posição de bit para a qual INT1 tem 0. É sempre verdade que ~~ INT = –(INT + 1).
INT1 || INT2 Número inteiro O resultado dessa operação é o bit a bit "or inclusivo" de INT1 e INT2. Ou seja, há um 1 no resultado para cada posição de bit para a qual há um 1 em INT1 ou INT2 ou ambos.
INT1 ||/& INT2 Número inteiro O resultado dessa operação é o bit a bit "or exclusivo" de INT1 e INT2. Ou seja, há um 1 no resultado para cada posição de bit para a qual há um 1 em INT1 ou INT2, mas não ambos.
INT1 && INT2 Número inteiro Produz o bit a bit "and" dos números inteiros INT1 e INT2. Ou seja, há um 1 no resultado para cada posição de bit para a qual há um 1 em INT1 e INT2.
INT1 &&~~ INT2 Número inteiro Produz o bit a bit "and" de INT1 e o complemento bit a bit de INT2. Ou seja, há um 1 no resultado para cada posição de bit para a qual há um 1 em INT1 e um 0 em INT2. Este é o mesmo que INT1 && (~~INT2) e é útil para limpar bits do INT1 configurado em INT2.
INT << N Número inteiro Produz o padrão de bits de INT1 deslocado para a esquerda N posições. Um valor negativo para N produz um deslocamento para a direita.
INT >> N Número inteiro Produz o padrão de bits de INT1 deslocado para a direita N posições. Um valor negativo para N produz um deslocamento para a esquerda.
INT1 &&=_0 INT2 Booleano Equivalente à expressão booleana INT1 && INT2 /== 0 mas é mais eficiente.
INT1 &&/=_0 INT2 Booleano Equivalente à expressão booleana INT1 && INT2 == 0 mas é mais eficiente.
integer_bitcount(INT) Número inteiro Conta o número de 1 ou 0 bits na representação de dois complementos de INT. Se INT for não negativo, N será o número de 1 bit. Se INT for negativo, será o número de 0 bit. Devido à extensão do sinal, há um número infinito de 0 bit em um número inteiro não negativo ou 1 bit em um número inteiro negativo. Esse é sempre o caso de integer_bitcount(INT) = integer_bitcount(-(INT+1)).
integer_leastbit(INT) Número inteiro Retorna a posição de bit N do bit menos significativo configurado no número inteiro INT. N é a potência mais alta de 2 pela qual INT é dividido exatamente.
integer_length(INT) Número inteiro Retorna o comprimento em bits de INT como um número inteiro de dois complementos. Ou seja, N é o menor número inteiro tal que INT < (1 << N) if INT >= 0 INT >= (–1 << N) if INT < 0. Se INT for não negativo, a representação de INT como um número inteiro não assinado requer um campo de pelo menos N bits. Alternativamente, no mínimo N+1 bits é necessário para representar INT como um número inteiro assinado, independentemente do sinal.
testbit(INT, N) Booleano Testa o bit na posição N no número inteiro INT e retorna o estado do bit N como um valor booleano, que é verdadeiro para 1 e falso para 0.