<<-Operator (C#-Referenz)<< Operator (C# Reference)

Der Left Shift-Operator (<<) verschiebt den ersten Operanden um die Anzahl von Bits nach links, die durch den zweiten Operanden angegeben wird.The left-shift operator (<<) shifts its first operand left by the number of bits specified by its second operand. Der Typ des zweiten Operanden muss ein int oder ein Typ sein, der eine vordefinierte implizite numerische Konvertierung in int besitzt.The type of the second operand must be an int or a type that has a predefined implicit numeric conversion to int.

HinweiseRemarks

Ist der erste Operand ein int oder uint (32-Bit-Menge), wird die Umschaltanzahl durch die niederwertigen fünf Bits des zweiten Operanden angegeben.If the first operand is an int or uint (32-bit quantity), the shift count is given by the low-order five bits of the second operand. Die tatsächliche Umschaltanzahl beträgt also 0 bis 31 Bits.That is, the actual shift count is 0 to 31 bits.

Ist der erste Operand ein long oder ulong (64-Bit-Menge), wird die Umschaltanzahl durch die niederwertigen sechs Bits des zweiten Operanden angegeben.If the first operand is a long or ulong (64-bit quantity), the shift count is given by the low-order six bits of the second operand. Die tatsächliche Umschaltanzahl beträgt also 0 bis 63 Bits.That is, the actual shift count is 0 to 63 bits.

Alle höherwertigen Bits, die nach der Verschiebung nicht im Bereich des Typs des ersten Operanden liegen, werden verworfen. Die niederwertigen leeren Bits werden mit Nullen angefüllt.Any high-order bits that are not within the range of the type of the first operand after the shift are discarded, and the low-order empty bits are zero-filled. Schiebeoperationen verursachen nie Überläufe.Shift operations never cause overflows.

Benutzerdefinierte Typen können den <<-Operator überladen (siehe Operator). Der Typ des ersten Operanden muss daher der benutzerdefinierte Typ sein, der Typ des zweiten Operanden int.User-defined types can overload the << operator (see operator); the type of the first operand must be the user-defined type, and the type of the second operand must be int. Wenn ein binärer Operator überladen ist, wird der zugehörige Zuweisungsoperator, sofern er vorhanden ist, auch implizit überladen.When a binary operator is overloaded, the corresponding assignment operator, if any, is also implicitly overloaded.

BeispielExample

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
*/

KommentareComments

Beachten Sie, dass i<<1 und i<<33 dasselbe Ergebnis liefern, da die fünf niederwertigen Bits von 1 und 33 übereinstimmen.Note that i<<1 and i<<33 give the same result, because 1 and 33 have the same low-order five bits.

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-OperatorenC# Operators