Share via


Operador << (Referencia de C#)

El operador de desplazamiento a la izquierda (<<) desplaza su primer operando a la izquierda el número de bits especificado por su segundo operando. El tipo del segundo operando debe ser un int o un tipo que tiene una conversión numérica implícita predefinida en int.

Comentarios

Si el primer operando es int o uint (cantidad de 32 bits), los cinco bits de orden inferior del segundo operando proporcionan el valor de desplazamiento. Es decir, el recuento de desplazamiento real es de 0 a 31 bits.

Si el primer operando es long o ulong (cantidad de 64 bits), los seis bits de orden inferior del segundo operando proporcionan el valor de desplazamiento. Es decir, el recuento de desplazamiento real es de 0 a 63 bits.

Los bits de orden superior que no están contenidos en el intervalo del tipo del primer operando después del desplazamiento se descartan y los bits vacíos de orden inferior se rellenan con ceros. Las operaciones de desplazamiento nunca producen desbordamientos.

Los tipos definidos por el usuario pueden sobrecargar el operador << (vea operator (Referencia de C#)); el tipo del primer operando debe ser el tipo definido por el usuario, mientras que el tipo del segundo operando debe ser int. Cuando se sobrecarga un operador binario, el operador de asignación correspondiente, si existe, también se sobrecarga de modo implícito.

Ejemplo

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

Comentarios

Observe que i<<1 e i<<33 dan el mismo resultado, ya que 1 y 33 tienen los mismos cinco bits de orden inferior.

Vea también

Referencia

operadores de C#

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#