2017-09-07 11 views
-4
for (int g=1; g<=100000; g++) 
{ 
    for (int y=0; y<20; y++) 
    { 
     if (((1<<y)&g) && (!((1<<(y+1))&g)) && ((1<<(y+2))&g)) counter[g]++; 
    } 
} 

これは状態を確認していますがまだ混乱していますが、101を確認していますか?
誰でもこの条件がテストされている場合、何を説明することができますか?ループ内のテスト条件を理解できません

+0

と置き換えることができます。ビットシフト演算子とビット単位ANDについて聞いたことがありますか? – user0042

+5

これ以上分割することができなくなるまで、小さな断片に分割してください。次に、デバッガを使用して、それぞれの単純かつ小さなサブ式の結果を確認します。 –

+1

'if'文は、その述語として名前付き関数を必死に呼び出しています。 –

答えて

2

内側のサイクルでは、gのうちの少なくとも22ビットのうち、101(可能性として交差)ビットパターンの数が検出されます。条件を

if (((g >> i) & 0b111) == 0b101) counter[g]++; 
+0

プラス1つです。私はあなたに疑念の恩恵を与えます。 – Bathsheba

+0

'y'の最大値は19なので' 1 <<(y + 2) 'は21だけシフトします(22ビット目がチェックされています) –

関連する問題