version 6.0
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 Numérique (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ération | Opérateur | Syntaxe | Retourne | |
ET | & | E.long & E.long | E.long | |
OU (inclusif) | | | E.long | E.long | E.long | |
OU (exclusif) | ^| | E.long ^| E.long | E.long | |
Décaler bits à gauche | << | E.long << E.long | E.long | (voir note 1) |
Décaler bits à droite | >> | E.long >> E.long | E.long | (voir note 1) |
Mettre bit à 1 | ?+ | E.long ?+ E.long | E.long | (voir note 2) |
Mettre bit à 0 | ?- | E.long ?- E.long | E.long | (voir note 2) |
Tester bit | ?? | E.long ?? E.long | Boolé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 bits | Description |
ET | Chaque 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 à gauche | La 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 à droite | La 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 à 1 | La 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 à 0 | La 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 bit | Retourne 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. |
Exemples
(1) Le tableau ci-dessous propose un exemple d'utilisation de chaque opérateur sur les bits :
Opération | Exemple | Résultat |
ET | 0x0000FFFF & 0xFF00FF00 | 0x0000FF00 |
OU (inclusif) | 0x0000FFFF | 0xFF00FF00 | 0xFF00FFFF |
OU (exclusif) | 0x0000FFFF ^| 0xFF00FF00 | 0xFF0000FF |
Décaler bit gauche | 0x0000FFFF << 8 | 0x00FFFF00 |
Décaler bit droit | 0x0000FFFF >> 8 | 0x000000FF |
Mettre bit à 1 | 0x00000000 ?+ 16 | 0x00010000 |
Mettre bit à 0 | 0x00010000 ?- 16 | 0x00000000 |
Tester bit | 0x00010000 ?? 16 | Vrai |
(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 |
Masque ressource heap système | Entier long | 64 |
Bit ressource heap système | Entier long | 6 |
Masque ressource purgeable | Entier long | 32 |
Bit ressource purgeable | Entier long | 5 |
Masque ressource verrouillée | Entier long | 16 |
Bit ressource verrouillée | Entier long | 4 |
Masque ressource protégée | Entier long | 8 |
Bit ressource protégée | Entier long | 3 |
Masque ressource préchargée | Entier long | 4 |
Bit ressource préchargée | Entier long | 2 |
Masque ressource modifiée | Entier long | 2 |
Bit ressource modifiée | Entier long | 1 |
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.
Référence
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.