2013-08-13 24 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 <<

である0位置、左にシフトされます2番目の オペランドで指定されたビット数だけ左に移動します。シフト操作によって退避されたビットはゼロ充填される。これはシフトと回転の代わりに論理シフトである です。

これは、ユーザーがビット値を1にし、正しい数に基づいてビットを左にシフトしていることを意味します。

つまり、この場合、その値はバイナリ形式で表示されます。

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

第1シフトは必要ありませんが、それは残りの部分とより一致見えます。

+0

C++言語リファレンスの信頼できるソースとして 'MSDN'を参照しないでください。IMHO –

+0

@ g-makulik:私は同意しがちですが、このMSDNのドキュメントは正確であるようです。 –

2

それは単に

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

されている可能性が、コーダは、より多くの対称が好き。

5

1 << 0 1は左シフト演算子がにシフトさせること に最初のオペランドのビットパターンを引き起こすだけ1.

4

<<演算子はビットシフタです。したがって、1 << 2は、に等しく、1をとり、2ビットだけシフトします。 1 << 0を使用している場合、値に影響はなく、おそらくすべてが一貫して表示されることになります。

3

x << y - xを左に(大きい値に)y倍シフトすることを意味します。 数学では、これは次のようになります。 またはx * pow(2, y)

関連する問題