Opérateurs sur les bits

4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant

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é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.

Exemples

(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 :

ConstanteTypeValeur
Masque ressource heap systèmeEntier long64
Bit ressource heap systèmeEntier long6
Masque ressource purgeableEntier long32
Bit ressource purgeableEntier long5
Masque ressource verrouilléeEntier long16
Bit ressource verrouilléeEntier long4
Masque ressource protégéeEntier long8
Bit ressource protégéeEntier long3
Masque ressource préchargéeEntier long4
Bit ressource préchargéeEntier long2
Masque ressource modifiéeEntier long2
Bit ressource modifiéeEntier long1

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.


4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant