<<, opérateur (référence C#)

L'opérateur de décalage vers la gauche (<<) décale le premier opérande vers la gauche du nombre de bits spécifié par le second opérande.Le type du second opérande doit être un int ou un type qui a une conversion numérique implicite prédéfinie sur int.

Notes

Si le premier opérande est int ou uint (quantité de 32 bits), le nombre de décalage est donné par les cinq bits de poids faible du second opérande.Autrement dit, le nombre de décalage réel est 0 à 31 bits.

Si le premier opérande est long ou ulong (quantité de 64 bits), le nombre de décalage est donné par les six bits de poids faible du second opérande.Autrement dit, le nombre de décalage réel est 0 à 63 bits.

Les bits de poids fort qui ne figurent pas dans la plage du type du premier opérande après le décalage sont ignorés, et les bits vides de poids faible sont remplis à l'aide de zéros.Les opérations de décalage ne causent jamais de dépassement de capacité.

Les types définis par l'utilisateur peuvent surcharger l'opérateur << (consultez opérateur) ; le type du premier opérande doit être un type défini par l'utilisateur et le type du second opérande doit être int.Lorsqu'un opérateur binaire est surchargé, l'opérateur d'assignation correspondant (s'il y en a un) est, lui aussi, implicitement surchargé.

Exemple

class MainClass11
{
    static void Main()
    {
        int i = 1;
        long lg = 1;
        // Shift i one bit to the left. The result is 2.
        Console.WriteLine("0x{0:x}", i << 1);
        // In binary, 33 is 100001. Because the value of the five low-order
        // bits is 1, the result of the shift is again 2. 
        Console.WriteLine("0x{0:x}", i << 33);
        // Because the type of lg is long, the shift is the value of the six
        // low-order bits. In this example, the shift is 33, and the value of
        // lg is shifted 33 bits to the left.
        //     In binary:     10 0000 0000 0000 0000 0000 0000 0000 0000 
        //     In hexadecimal: 2    0    0    0    0    0    0    0    0
        Console.WriteLine("0x{0:x}", lg << 33);
    }
}
/*
Output:
0x2
0x2
0x200000000
*/

Commentaires

Notez que i<<1 et i<<33 fournissent le même résultat, car 1 et 33 possèdent les cinq mêmes bits d'ordre bas.

Voir aussi

Référence

Opérateurs C#

Concepts

Guide de programmation C#

Autres ressources

Référence C#