Оператор << (Справочник по 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#