2017-09-06 8 views
-7

ここにコードがありますが、私はそれが何をしているのか知っていますが、私は理解しません。if条件は何ですか?誰かが何をしているのか説明してもらえますか?n&1?

if(n&1) 
    { 
     for(i=n/2,j=n/2+1;;i--,j++) 
     if(__gcd(i,j)==1) 
     { 
      cout<<i<<" "<<j<<endl; 
      break; 
     } 
    } 
    else 
    { 
     for(i=n/2-1,j=n/2+1;;i--,j++) 
     if(__gcd(i,j)==1) 
     { 
      cout<<i<<" "<<j<<endl; 
      break; 
     } 
    } 
    return 0; 
} 
+6

ビット演算子について知っていますか? – NathanOliver

+1

機能的に 'if(n%2 == 1) 'と同じです –

+0

[documentation](http://en.cppreference.com/w/cpp/language/operator_arithmetic)を見てください – CoryKramer

答えて

3

ビット演算子です。あなたの検索語があります!

&オペレータは、2番目のパラメータに設定されている場合、最初のビットが「セットされている」場合にマスクを提供します。つまり、Nが17、2進数が00010001、 00000001であるので、2つのビットを一緒にマスキングすると最初のビットが空白になり、00000001としてNが残されます。

基本的に、その特定のif文は最後のビットを除いてすべて0になります。 Nが奇数か偶数かを検出する条件である。

関連する問題