enum
{
kFlag_FPS = 1 << 0,
kFlag_Help = 1 << 1,
kFlag_RedBlue3D = 1 << 2,
}
Я пытаюсь понять, что этот код я не знаю, что:Что такое 1 << 0?
1 << 0
средства?
Любая помощь очень ценится!
enum
{
kFlag_FPS = 1 << 0,
kFlag_Help = 1 << 1,
kFlag_RedBlue3D = 1 << 2,
}
Я пытаюсь понять, что этот код я не знаю, что:Что такое 1 << 0?
1 << 0
средства?
Любая помощь очень ценится!
От MSDN - Shift Operators: >> and <<
Оператор сдвига влево приводит к последовательности битов в первом операнде к быть перенесен на слева от количества бит, заданных вторым операндом . Биты, освобожденные операцией сдвига, заполняются нулями. Это логический сдвиг вместо операции сдвига и поворота.
Это означает, что пользователь принимает значение битов 1
и сдвигает биты влево на основании правильного номера.
Это означает, что в этом случае их значения будут выглядеть в двоичном виде.
1 << 0 = `0000 0001`
1 << 1 = `0000 0010`
1 << 2 = `0000 0100`
Первая смена не требуется, но она выглядит более согласованной с остальными.
Вам не следует ссылаться на «MSDN» как на надежный источник для языковой ссылки на языке C++. IMHO –
@ g-makulik: Я склонен согласиться, но эта конкретная документация MSDN представляется точной. –
Это могло бы быть просто
enum
{
kFlag_FPS = 1,
kFlag_Help = 1 << 1,
kFlag_RedBlue3D = 1 << 2,
}
но кодировщик любит больше симметрии.
1 << 0
1 смещается влево на 0 позиции, которая только 1.
Оператор <<
- это немного сдвиг. Итак, 1 << 2
, равно 4
по мере того как вы принимаете 1
и смените на 2
бит. При использовании 1 << 0
, который не влияет на стоимость и, вероятно, там, чтобы все выглядело согласованным
x << y
- означает сдвиговые биты x влево (до большего значения) y раз. В математике это выглядит так: x * (2^y)
или x * pow(2, y)
Это просто, чтобы все выглядело последовательным. – Mysticial
Побитовое смещение влево, но я не знаю, как это объяснить. – putvande
1 << 0 - 1 сдвинутый левый 0 раз или 1 * 2^0. Итак, это 1. – BrainSteel