>> opérateur (Visual Basic)
Effectue un décalage arithmétique à droite sur une série de bits.
Syntaxe
result = pattern >> amount
Éléments
result
Obligatoire. Valeur numérique intégrale. Résultat du décalage du modèle binaire. Le type de données est le même que celui de pattern
.
pattern
Obligatoire. Expression numérique entière. Modèle binaire qui doit être décalé. Le type de données doit être un type entier (SByte
, Byte
, Short
, UShort
, Integer
, UInteger
, Long
ou ULong
).
amount
Obligatoire. Expression numérique. Nombre de bits pour décaler le modèle binaire. Le type de données doit être Integer
ou étendu à Integer
.
Notes
Les décalages arithmétiques ne sont pas circulaires, ce qui signifie que les bits décalés d’une extrémité du résultat ne sont pas réintroduites à l’autre extrémité. Dans un décalage arithmétique vers la droite, les bits déplacés au-delà de la position de bits la plus à droite sont ignorés, et le bit le plus à gauche (signe) est propagé dans les positions de bits libérées à gauche. Cela signifie que si pattern
a une valeur négative, les positions libérées sont définies sur la valeur un ; sinon, elles sont définies sur zéro.
Notez que les types de données Byte
, UShort
, UInteger
et ULong
ne sont pas signés. Il n’y a donc aucun bit de signe à propager. Si pattern
est d’un type non signé, les positions libérées sont toujours définies sur zéro.
Pour éviter le décalage de plus de bits que le résultat ne peut contenir, Visual Basic masque la valeur de amount
avec un masque de taille correspondant au type de données de pattern
. Le binaire AND de ces valeurs est utilisé pour la quantité de décalage. Les masques de taille sont les suivants :
Type de données de pattern |
Masque de taille (décimal) | Masque de taille (hexadécimal) |
---|---|---|
SByte , Byte |
7 | &H00000007 |
Short , UShort |
15 | &H0000000F |
Integer , UInteger |
31 | &H0000001F |
Long , ULong |
63 | &H0000003F |
Si amount
est zéro, la valeur de result
est identique à la valeur de pattern
. Si amount
est négatif, il est pris comme une valeur non signée et masquée avec le masque de taille approprié.
Les décalages arithmétiques ne génèrent jamais d’exceptions de dépassement de capacité.
Surcharge
L’opérateur >>
peut être surchargé, ce qui signifie qu’une classe ou une structure peut redéfinir son comportement lorsqu’un opérande a le type de cette classe ou structure. Si votre code utilise cet opérateur sur ce type de classe ou structure, veillez à comprendre son comportement une fois qu’il est redéfini. Pour plus d'informations, consultez Operator Procedures.
Exemple
L’exemple suivant utilise l’opérateur >>
pour effectuer des décalages arithmétiques vers la droite sur des valeurs intégrales. Le résultat a toujours le même type de données que celui de l’expression décalée.
Dim pattern As Short = 2560
' The bit pattern is 0000 1010 0000 0000.
Dim result1, result2, result3, result4, result5 As Short
result1 = pattern >> 0
result2 = pattern >> 4
result3 = pattern >> 10
result4 = pattern >> 18
result5 = pattern >> -1
Les résultats de l’exemple précédent sont les suivants :
result1
est 2560 (0000 1010 0000 0000).result2
est 160 (0000 0000 1010 0000).result3
est 2 (0000 0000 0000 0010).result4
est 640 (0000 0010 1000 0000).result5
est 0 (décalé de 15 places vers la droite).
Le montant du décalage pour result4
est calculé comme 18 ET 15, ce qui équivaut à 2.
L’exemple suivant montre des décalages arithmétiques sur une valeur négative.
Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13
Les résultats de l’exemple précédent sont les suivants :
negresult1
est -512 (1111 1110 0000 0000).negresult2
est -1 (le bit de signe est propagé).