4D v14.3Opérateurs sur les bits |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
Opérateurs sur les bits
|
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. |
(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 |
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.
Produit : 4D
Thème : Opérateurs
Nom intl. : Bitwise Operators
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
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)