Bitwise operators

Opérateur

Syntaxe

Calcule sur les bits des nombres entiers : && et, || ou, ~~ ou exclusif, ! inverse tous les bits, << et >> décalent.

<a> && <b>
<a> || <b>
<a> ~~ <b>
!<a>
<a> << <n>
<a> >> <n>

S’écrit aussi : &&, ||, ~~, !, <<, >>

Les éléments

<a>Un nombre, traité comme un entier signé sur 32 bits. Les décimales sont perdues : 3.7 || 0 vaut 3.
<b>Un nombre, traité comme un entier signé sur 32 bits.
<n>Le nombre de positions de bits à décaler. >> garde le signe : -16 >> 2 vaut -4.

À savoir

  • Les symboles sont bit à bit et les mots sont logiques. && n'est pas AND, et || n'est pas OR. C'est l'inverse du C et du JavaScript.
  • Un test de bit demande des parenthèses : && passe après =, donc flags && 4 = 4 signifie flags && (4 = 4). Écrivez (flags && 4) = 4, ou simplement IF flags && 4 THEN.
  • Les résultats sont signés sur 32 bits : 1 << 31 vaut -2147483648, et !5 vaut -6.
  • XOR n'existe pas : il se compile, mais le programme ne démarre pas. Écrivez ~~.
  • Un & seul ne concatène pas : "a" & "b" donne 0. Assemblez les chaînes avec +.
  • Dans une condition #IF, &&, || et ! sont les mots logiques, pas ces opérateurs.
  • Les littéraux binaires s'écrivent %1010, les hexadécimaux 0xFF. Les drapeaux d'un ENUMERATIONBINARY se combinent avec ||.

Exemple

flags = %1100Console(Str(flags && %1010))   ' 8Console(Str(flags || %0011))   ' 15Console(Str(flags ~~ %1010))   ' 6Console(Str(!0))   ' -1Console(Str(1 << 4))   ' 16Console(Str(-16 >> 2))   ' -4IF (flags && 4) = 4 THEN Console("bit set")   ' bit set
Dans le manuel : Constantes et opérateurs