4D v14.3

Opérateurs sur les bits

Accueil

 
4D v14.3
Opérateurs sur les bits

Opérateurs sur les bits  


 

 

Les opérateurs sur les bits s'appliquent à des expressions ou valeurs de type Entier long.

Note : Si vous passez une valeur de type Entier ou Réel à un opérateur sur les bits, 4D la convertit en Entier long avant de calculer le résultat de l'expression.

Lorsque vous employez des opérateurs sur les bits, vous devez considérer une valeur de type Entier long comme un tableau de 32 bits. Les bits sont numérotés de 0 à 31, de droite à gauche.

Comme un bit peut valoir 0 (zéro) ou 1, vous pouvez également considérer une valeur de type Entier long comme une expression dans laquelle vous pouvez stocker 32 valeurs de type Booléen. Lorsque le bit vaut 1, la valeur est Vrai et lorsque le bit vaut 0, la valeur est Faux.

Une expression utilisant un opérateur sur les bits retourne une valeur de type Entier long, à l'exception de l'opérateur Tester bit avec lequel l'expression retournée est du type Booléen. Le tableau suivant fournit la liste des opérateurs sur les bits et leur syntaxe :

OpérationOpérateurSyntaxeRetourne
ET&E.long & E.longE.long
OU (inclusif)|E.long | E.longE.long
OU (exclusif)^|E.long ^| E.longE.long
Décaler bits à gauche<<E.long << E.longE.long(voir note 1)
Décaler bits à droite>>E.long >> E.longE.long(voir note 1)
Mettre bit à 1?+E.long ?+ E.longE.long(voir note 2)
Mettre bit à 0?-E.long ?- E.longE.long(voir note 2)
Tester bit??E.long ?? E.longBooléen(voir note 2)

Notes
1. Dans les opérations utilisant Décaler bits à gauche et Décaler bits à droite, le second opérande indique le nombre de décalages de bits du premier opérande à effectuer dans la valeur retournée. Par conséquent, ce second opérande doit être compris entre 0 et 31. Notez qu'un décalage de 0 retourne une valeur inchangée et qu'un décalage de plus de 31 bits retourne 0x00000000 car tous les bits sont perdus. Si vous passez une autre valeur en tant que second opérande, le résultat sera non significatif.
2. Dans les opérations utilisant Mettre bit à 1, Mettre bit à 0 et Tester bit, le second opérande indique le numéro du bit sur lequel agir. Par conséquent, ce second opérande doit être compris entre 0 et 31. Sinon, l'expression retourne inchangée la valeur du premier opérande pour Mettre bit à 1 et Mettre bit à 0, et retourne Faux pour Tester bit.

Le tableau suivant dresse la liste des opérateurs sur les bits et de leurs effets :

Opération sur les bitsDescription
ETChaque bit retourné est le résultat de l'opération ET logique appliquée aux deux bits opérandes.
Voici la table du ET logique :
1 & 1 --> 1
0 & 1 --> 0
1 & 0 --> 0
0 & 0 --> 0
En résumé, le résultat vaut 1 si les deux bits opérandes valent 1, dans tous les autres cas le bit résultant vaut 0.
OU (inclusif)Chaque bit retourné est le résultat de l'opération OU inclusif logique appliquée aux deux bits opérandes.
Voici la table du OU inclusif logique :
1 | 1 --> 1
0 | 1 --> 1
1 | 0 --> 1
0 | 0 --> 0
En résumé, le résultat vaut 1 si au moins un des deux bits opérandes vaut 1, sinon le bit résultant vaut 0.
OU (exclusif)Chaque bit retourné est le résultat de l'opération OU exclusif logique appliquée aux deux bits opérandes.
Voici la table du OU exclusif logique:
1 ^| 1 --> 0
0 ^| 1 --> 1
1 ^| 0 --> 1
0 ^| 0 --> 0
Donc, le résultat vaut 1 si un seul des deux bits opérandes vaut 1 (et pas l'autre), dans tous les autres cas le bit résultant vaut 0.
Décaler bits à gaucheLa valeur retournée correspond au premier opérande dont la valeur est décalée vers la gauche du nombre de bits spécifié par le second opérande. Les bits auparavant situés à gauche sont perdus et les nouveaux bits situés à droite ont la valeur 0.
Note : En ne tenant compte que des valeurs positives, un décalage vers la gauche de N bits revient à multiplier la valeur par 2^N.
Décaler bits à droiteLa valeur retournée correspond au premier opérande dont la valeur est décalée vers la droite du nombre de bits spécifié par le second opérande. Les bits auparavant situés à droite sont perdus et les nouveaux bits situés à gauche ont la valeur 0.
Note : En ne tenant compte que des valeurs positives, un décalage vers la droite de N bits revient à diviser la valeur par 2^N.
Mettre bit à 1La valeur retournée est la valeur du premier opérande dans lequel le bit dont le numéro est spécifié par le second opérande est positionné à 1. Les autres bits sont inchangés.
Mettre bit à 0La valeur retournée est la valeur du premier opérande dans lequel le bit dont le numéro est spécifié par le second opérande est positionné à 0. Les autres bits sont inchangés.
Tester bitRetourne Vrai si, dans le premier opérande, le bit dont le numéro est indiqué par le second opérande vaut 1. Retourne Faux si, dans le premier opérande, le bit dont le numéro est indiqué par le second opérande vaut 0.

Exemple  

(1) Le tableau ci-dessous propose un exemple d'utilisation de chaque opérateur sur les bits :

OpérationExempleRésultat
ET0x0000FFFF & 0xFF00FF000x0000FF00
OU (inclusif)0x0000FFFF | 0xFF00FF000xFF00FFFF
OU (exclusif)0x0000FFFF ^| 0xFF00FF000xFF0000FF
Décaler bit gauche0x0000FFFF << 80x00FFFF00
Décaler bit droit0x0000FFFF >> 80x000000FF
Mettre bit à 10x00000000 ?+ 160x00010000
Mettre bit à 00x00010000 ?- 160x00000000
Tester bit0x00010000 ?? 16Vrai

(2) 4D exploite de nombreuses constantes prédéfinies. Le nom de certaines d'entre elles commence par "Bit" ou "Masque". C'est le cas des constantes incluses dans le thème Propriétés des ressources :

Constante Type Valeur
Bit ressource heap système Entier long 6
Bit ressource modifiée Entier long 1
Bit ressource préchargée Entier long 2
Bit ressource protégée Entier long 3
Bit ressource purgeable Entier long 5
Bit ressource verrouillée Entier long 4
Masque ressource heap système Entier long 64
Masque ressource modifiée Entier long 2
Masque ressource préchargée Entier long 4
Masque ressource protégée Entier long 8
Masque ressource purgeable Entier long 32
Masque ressource verrouillée Entier long 16

Ces constantes vous permettent de tester la valeur retournée par la fonction Lire proprietes ressource ou de définir la valeur à passer à ECRIRE PROPRIETES RESSOURCE. Les constantes dont le nom débute par “Bit” fournissent la position du bit que vous voulez tester, effacer ou fixer. Les constantes dont le nom débute par “Masque” sont des valeurs de type Entier long dans lesquelles seul le bit que vous voulez tester, effacer ou fixer est égal à 1.

Si, par exemple, vous devez tester si une ressource (dont les propriétés sont stockées dans la variable $vlResAttr) est purgeable ou non, vous pouvez écrire :

 Si($vlResAttr ?? Bit ressource purgeable) ` Est-ce que la ressource est purgeable?

ou :

 Si(($vlResAttr  & Masque ressource purgeable)#0) ` Est-ce que la ressource est purgeable?

A l'inverse, vous pouvez utiliser ces constantes pour définir le même bit. Vous pouvez écrire :

 $vlResAttr:=$vlResAttr ?+Bit ressource purgeable

ou :

 $vlResAttr:=$vlResAttr |Bit ressource purgeable

(3) Vous voulez stocker deux valeurs entières dans un Entier long. Vous pouvez écrire :

 $vlLong:=($viIntA<<16)|$viIntB  ` Stocker deux Entiers dans un Entier long
 $vlIntA:=$vlLong>>16 ` Extraire l'Entier stocké dans le mot haut
 $viIntB:=$vlLong  & 0xFFFF ` Extraire l'entier stocké dans le mot bas

Note : Soyez prudent lorsque vous manipulez des Entiers longs ou des Entiers avec des expressions qui combinent des opérateurs sur les bits et des opérateurs numériques. Le bit supérieur (bit 31 pour un Entier long, bit 15 pour un Entier) détermine le signe de la valeur (positif s'il est à 0, négatif s'il est à 1). Les opérateurs numériques utilisent ce bit pour détecter le signe d'une valeur, mais les opérateurs sur les bits n'en tiennent pas compte.

 
PROPRIÉTÉS 

Produit : 4D
Thème : Opérateurs
Nom intl. : Bitwise Operators

 
VOIR AUSSI  

Opérateurs
Opérateurs de comparaison
Opérateurs logiques
Opérateurs numériques
Opérateurs sur les chaînes
Opérateurs sur les dates
Opérateurs sur les heures
Opérateurs sur les images

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v12.4)
4D - Langage ( 4D v11 SQL Release 6)
4D - Langage ( 4D v14 R3)
4D - Langage ( 4D v14 R2)
4D - Langage ( 4D v13.5)
4D - Langage ( 4D v14.3)
4D - Langage ( 4D v14 R4)