Поделиться через


Оператор << (Справочник по C#)

Оператор сдвига влево (<<) сдвигает первый операнд влево в соответствии с количеством бит, заданным вторым операндом. Тип второго операнда должен быть int или тип, имеющий предопределенное неявное числовое преобразование в int.

Заметки

Если тип первого операнда — int или uint (32-разрядное число), начало сдвига задается пятью младшими разрядами второго операнда. Фактический сдвиг от 0 до 31 бит.

Если тип первого операнда — long или ulong (64-разрядное число), начало сдвига задается шестью младшими разрядами второго операнда. Фактический сдвиг от 0 до 63 бит.

Старшие разряды, которые находятся не в диапазоне тип первого операнда после смены отбрасываются, а пустые младшие разряды заполняются нулями. Операторы сдвига никогда не вызывают переполнений.

Определенные пользователем типы могут вызвать перегрузку оператора << (см.оператор); тип первого операнда должен быть определен пользователем, а тип второго должен быть int. Если бинарный оператор перегружен, соответствующий оператор присваивания (если таковой имеется), также будет явно перегружен.

Пример

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

Комментарии

Обратите внимание, что i<<1 и i<<33 дают одинаковый результат, поскольку 1 и 33 имеют те же пять младших разрядов.

См. также

Ссылки

Операторы C#

Основные понятия

Руководство по программированию на C#

Другие ресурсы

Справочник по C#