2013-08-13 3 views
14
enum 
    { 
     kFlag_FPS   = 1 << 0, 
     kFlag_Help  = 1 << 1, 
     kFlag_RedBlue3D = 1 << 2, 
    } 

Я пытаюсь понять, что этот код я не знаю, что:Что такое 1 << 0?

1 << 0 

средства?

Любая помощь очень ценится!

+10

Это просто, чтобы все выглядело последовательным. – Mysticial

+0

Побитовое смещение влево, но я не знаю, как это объяснить. – putvande

+0

1 << 0 - 1 сдвинутый левый 0 раз или 1 * 2^0. Итак, это 1. – BrainSteel

ответ

22

От MSDN - Shift Operators: >> and <<

Оператор сдвига влево приводит к последовательности битов в первом операнде к быть перенесен на слева от количества бит, заданных вторым операндом . Биты, освобожденные операцией сдвига, заполняются нулями. Это логический сдвиг вместо операции сдвига и поворота.

Это означает, что пользователь принимает значение битов 1 и сдвигает биты влево на основании правильного номера.

Это означает, что в этом случае их значения будут выглядеть в двоичном виде.

1 << 0 = `0000 0001` 
1 << 1 = `0000 0010` 
1 << 2 = `0000 0100` 

Первая смена не требуется, но она выглядит более согласованной с остальными.

+0

Вам не следует ссылаться на «MSDN» как на надежный источник для языковой ссылки на языке C++. IMHO –

+0

@ g-makulik: Я склонен согласиться, но эта конкретная документация MSDN представляется точной. –

2

Это могло бы быть просто

enum 
    { 
     kFlag_FPS   = 1, 
     kFlag_Help  = 1 << 1, 
     kFlag_RedBlue3D = 1 << 2, 
    } 

но кодировщик любит больше симметрии.

5

1 << 0 1 смещается влево на 0 позиции, которая только 1.

4

Оператор << - это немного сдвиг. Итак, 1 << 2, равно 4 по мере того как вы принимаете 1 и смените на 2 бит. При использовании 1 << 0, который не влияет на стоимость и, вероятно, там, чтобы все выглядело согласованным

3

x << y - означает сдвиговые биты x влево (до большего значения) y раз. В математике это выглядит так: x * (2^y) или x * pow(2, y)