Что означает оператор << в C#? [дубликат]

296
14 октября 2017, 16:45

На данный вопрос уже ответили:

  • Как использовать маски слоев (layermask) и для чего пишут 1 << layer? 1 ответ

В определении перечисления используется символ <<:

public enum Lights
{
    NormalLights = 1 << 0,
    Highbeams = 1 << 10,
}

Что он означает и для чего он используется?

Answer 1

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

Примеры для понимания сути оператора:

Console.WriteLine("1 << 1 = " + (1 << 1));
Console.WriteLine("1 << 2 = " + (1 << 2));
Console.WriteLine("1 << 3 = " + (1 << 3));

В ответ даст следующее:

1 << 1 = 2
1 << 2 = 4
1 << 3 = 8

Что же такое сдвиг:

При применении оператора << Вы сдвигаете все число влево на заданное число бит, т.е.

  1. 000000001 << 2 = 000000100 в результате 1 оказывается на 3 месте и при расшифровке инта система получает 8
  2. 000001011 << 5 = 101100000 в результате 11 перетекает в 704

В Вашем случае Вы сдвигаете

public enum Lights
{
    NormalLights = 1 << 0, // т.е. 1 сдвигаем на 0
    Highbeams = 1 << 10, // т.е. 1 сдвигаем на 10
}

итого это равносильно

public enum Lights
{
    NormalLights = 1
    Highbeams = 1024
}

Хотя в целом я не понимаю логики заведения enum таким способом. Компилятор поставит уже вычисленные значения.

READ ALSO
Кодировка массива object в base64

Кодировка массива object в base64

Есть консольная программа, код:

211
Преобразование строки текста в строку HTML

Преобразование строки текста в строку HTML

Есть метод, который должен получать текст, и накладывать на него стили

226
C# Ошибка компиляции

C# Ошибка компиляции

Присоединил к солюшену проект WPF, однако выдает такую ошибку при компиляции:

176
Нужна устойчивая сортировка на C#

Нужна устойчивая сортировка на C#

Как мне создать тоже самое в C# в консоли? Мне нужен объект такого же типа - таблица, как в примере ниже и такая же сортировка - устойчивая:

204