|
![]() |
Les procédures d'accès au bit
manipulent les représentations internes indépendamment des
valeurs externes correspondant.
Tous les arguments de ces fonctions
sont de type entier (quelconque).
Les bits sont numérotés
"à partir de la droite", c'est-à-dire en partant
des "bits de poids le plus faibles", le bit le plus à
droite portant le numéro 0.
"et" binaire | catégorie: D | arguments: i,i | résultat: i |
Renvoie l'entier obtenu en effectuant une opération "et" sur chacun des bits de même rang de i et j (1 et 1 donne 1, toutes les autres combinaisons donnent 0). Le résultat est un entier de même variante que i et j (les deux arguments doivent être entiers de même variante).
"ou inclusif" binaire | catégorie: D | arguments: i,i | résultat: i |
Renvoie l'entier obtenu en effectuant une opération "ou" inclusif sur chacun des bits de même rang de i et j (0 et 0 donne 0, toutes leurs autres combinaisons donnent 1). Le résultat est un entier de même variante que i et j, qui doivent être, tous deux, de même variante.
"ou exclusif" binaire | catégorie: D | arguments: i,i | résultat: i |
Renvoie l'entier obtenu en effectuant une opération "ou" exclusif sur chacun des bits de même rang de i et j (1 et 1 donne 0, 1 et 0 ou 0 et 1 donnent 1, 0 et 0 donne 0). Le résultat est un entier de même variante que i et j, qui doivent être, tous deux, de même variante.
"négation" binaire | catégorie: D | arguments: i | résultat: i |
Renvoie l'entier correspondant à la négation des bits de i, obtenu en "complémentant" à un chacun des bits du motif binaire de i (1 devient 0 et 0 devient 1). Le résultat entier est de la même variante que i.
Exemples:
1 est représenté en binaire
comme 00...001
3 est représenté en binaire comme
00...011
iand(1,3) vaut 1
ior(1,3) vaut 3
ieor(1,3)
vaut 2
not(-2) vaut 1 (du à
la technique de codage de complément à deux)
not(-1) vaut 0
not(0)
vaut -1
not(1) vaut -2
décalage avec expulsion | catégorie: D | arguments: i,i | résultat: i |
Renvoie l'entier obtenu en décalant de shift (entier quelconque) bits vers la gauche (ou de shift bits vers la droite si shift<0) le motif binaire correspondant à la valeur de i. Les shift bits perdus de gauche (ou shift bits perdus de droite si shift<0 ) sont compensés par des 0. Le résultat (de type entier) a la même variante que i. Si shift=0, le résultat est égal à l'argumenti.
décalage circulaire | catégorie: D | arguments: i,i[,i] | résultat: i |
Renvoie l'entier obtenu en décalant "circulairement" de shift (entier quelconque) bits vers la gauche (ou de shift bits vers la droite si shift<0) l'ensemble de size (entier quelconque) bits les plus à droite (ou tous les bits si le paramètre size est omis) du motif binaire de i. Le résultat (de type entier) a la même variante que i.
Exemples:
3 est représenté en binaire
comme 00...0011
ishft(3,1) vaut
6 car en binaire 00...0110 vaut 6
3
est représenté en binaire comme 00...0|011
(la barre verticale marque la limite
du décalage)
ishftc(3,2,3)
vaut 5 car en binaire 00...0 |101 vaut 5
(le décalage circulaire de 2 bits sur
011 fourni 101)
valeur d'un bit | catégorie: D | arguments: i,i | résultat: l |
Renvoie la valeur logique du bit pos dans i. La valeur est vrai si le bit de rang pos (entier quelconque positif) de la valeur de i (entier quelconque) est à un et la valeur faux dans le cas contraire.
forçage d'un bit à 0 | catégorie: D | arguments: i,i | résultat: i |
Renvoie l'entier obtenu en forçant à 0 le bit de rang pos (entier quelconque positif) dans la valeur i. Le résultat est de type entier et de la même variante que i.
forçage d'un bit à 1 | catégorie: D | arguments: i,i | résultat: i |
Renvoie l'entier obtenu en forçant à 1 le bit de rang pos (entier quelconque positif) dans la valeur i. Le résultat est de type entier et de la même variante que i.
extraction d'une suite de bits | catégorie: D | arguments: i,i,i | résultat: i |
Renvoie l'entier correspondant à la chaîne de len bits extraite de i à partir du bit pos à gauche (entier quelconque positif ). La chaîne len est complétée à gauche par des 0. Le résultat est entier de la même variante quei.
Exemples:
btest((/3,4/),2) vaut (/.false.,.true./)
car 3 est représenté en binaire comme 00...0011
et 4 est représenté en
binaire comme 00...0100
ibclr(31,pos=(/1,2,3,4/))
vaut (/29,27,23,15 /) car 31 est représenté en binaire comme
00...011111
ibset(0,pos=(/1,2,3,4/))
vaut (/2,4,8,16 /) car 0 est représenté en binaire comme
00...0
ibits(14,1,3) vaut7 car
14 est représenté en binaire comme 00...01110 (les
bits extraits sont soulignes)
call mvbits (from, frompos, len, to, topos)
copie des bits | catégorie: D | arguments: i,i,i,i | résultat: i |
paramètres d'entrée: from, frompos,
len,topos
paramètres - résultats: to
Copie len bits de from, à partir de celui de rang frompos (à gauche) dans to, à partir du bit de rang topos (inclus , à gauche) , sans modifier la valeur des autres bits. Il faut que topos+len<=bit_size(to). Les arguments frompos, len et topos sont des entiers quelconques, from et to sont des entiers de même variante. L'argument to est un paramètre de genre intent(out) et doit obligatoirement être une "variable". Il est possible que from et to soient identiques.
Exemples:
par exemple pour n=to=6=00...00110
call mvbits(7,2,2,n,0) donne à n
la valeur 5 car
from=7=00...00111,
n=to=6=00...00110 ,
10 dans n est remplacé par 01 en
provenance de from ce qui donne le résultat
n=00...00101=5
Retour à la table des matières