Opérations sur les entiers à un bit

Ces fonctions permettent de manipuler des entiers sous forme de motifs binaires représentant des valeurs de complément à deux, où la position binaire N a un poids 2**N.

Les bits sont numérotés à partir de 0. Ces opérations agissent comme si le bit de signe d'un entier était prolongé indéfiniment vers la gauche. Ainsi, partout au-dessus de son bit le plus significatif, un entier positif a 0 bit et un entier négatif a 1 bit.

Tableau 1. CLEM opérations sur les entiers au niveau du bit
Fonction Résultat Descriptif
~~ INT1 Entier Produit le complément binaire de l'entier INT1. C'est-à-dire qu'il y a un 1 dans le résultat pour chaque position de bit pour laquelle INT1 a 0. Il est toujours vrai que ~~ INT = –(INT + 1).
INT1 || INT2 Entier Le résultat de cette opération est le « ou exclusif » au niveau du bit de INT1 et INT2. C'est-à-dire qu'il y a un 1 dans le résultat pour chaque position de bit pour laquelle il y a un 1 dans INT1 ou INT2 ou les deux.
INT1 ||/& INT2 Entier Le résultat de cette opération est le « ou exclusif » au niveau du bit de INT1 et INT2. C'est-à-dire qu'il y a un 1 dans le résultat pour chaque position de bit pour laquelle il y a un 1 dans INT1 ou INT2 mais pas dans les deux.
INT1 && INT2 Entier Produit l'opérateur « ET » au niveau du bit des entiers INT1 et INT2. C'est-à-dire qu'il y a un 1 dans le résultat pour chaque position de bit pour laquelle il y a un 1 à la fois dans INT1 et INT2.
INT1 &&~~ INT2 Entier Produit le « et » binaire de INT1 et le complément binaire de INT2. C'est-à-dire qu'il y a un 1 dans le résultat pour chaque position de bit pour laquelle il y a un 1 dans INT1 et un 0 dans INT2. Cela revient à INT1 && (~~INT2) et est utile pour effacer les bits de INT1 définis dans INT2.
INT << N Entier Produit le motif de bits INT1 décalé vers la gauche de N positions. Une valeur négative pour N produit un décalage vers la droite.
INT >> N Entier Produit le motif de bits INT1 décalé vers la droite de N positions. Une valeur négative pour N produit un décalage vers la gauche.
INT1 &&=_0 INT2 Booléen Équivalent de l'expression booléenne « INT1 && INT2 /== 0 », mais plus efficace.
INT1 &&/=_0 INT2 Booléen Équivalent de l'expression booléenne « INT1 && INT2 == 0 », mais plus efficace.
integer_bitcount(INT) Entier Compte le nombre de bits 1 ou 0 dans la représentation en complément à deux de INT. Si INT est non négatif, N est le nombre de bits 1. Si INT est négatif, c'est le nombre de bits 0. En raison de l'extension du signe, il y a un nombre infini de bits 0 dans un entier non négatif ou de bits 1 dans un entier négatif. integer_bitcount(INT) = integer_bitcount(-(INT+1)).
integer_leastbit(INT) Entier Renvoie la position du bit N du bit de poids faible défini dans l'entier INT. N est la plus grande puissance de 2 par laquelle INT se divise exactement.
integer_length(INT) Entier Renvoie la longueur en bits de INT sous forme d'entier à complément à deux. C'est-à-dire que N est le plus petit entier tel que INT < (1 << N) if INT >= 0 INT >= (–1 << N) if INT < 0. Si INT est non négatif, alors la représentation de INT en tant qu'entier non signé nécessite un champ d'au moins N bits. Sinon, un minimum de N+1 bits sont nécessaires pour représenter INT comme un entier signé, quel que soit son signe.
testbit(INT, N) Booléen Teste le bit en position N dans l'entier INT et renvoie l'état du bit N sous forme de valeur booléenne, qui est vraie pour 1 et fausse pour 0.