2016-11-08 5 views
-4

私はコードフェアで問題を解決しようとしていますが、ネットを閲覧した後、私はこの解決策を見つけました。&aの目的は何ですか

a * (a & 1)^b * !(b & 1)^!!(((a^b) + 1) & 2) 

答えて

4

単一&結果は、オペレータの左右両側に設定されているビットであることを意味し、ビット単位でAND。

1111 
& 
0111 

ビット単位のAND設定共通ビットの数になります:

1111 & 0111 = 0111 

あなたが(a & 1)を作るときの例15 & 7として、またはそれらがバイナリで表現されているよう

次のようなテストを実行しているので、最下位ビット(lsb)が設定されているかどうかをテストしています。

a 
& 
00000001 

aのビット値が00000110の場合、共通ビットが設定されていないため、結果は0になります。aのビット値が00000111の場合、lsbはaに設定されているため結果は1になります。

これは、lsbが数字が奇数であることが分かっている場合に使用されるため、実際には数字が奇数であるかどうか(1,3,5,7、...)です。

ソリューションの最初の部分を見て:それが偶数の場合a * (a & 1)あなたが(0または1覚えている)の値でaを乗算され、1 a場合は奇数であり、0。答えをしないにして、外部のリンクから関連する部分を抽出してください

-1

ここ&は、ビット単位の演算子(ビット上で動作し、ビットごとの演算を実行)です.FOR詳細はthisthis

+0

を見ます死んだリンクに脆弱です:) –

+0

@ TommyAndersenどのようにこれを行うには?何も助けられない? – Real73

+0

このリンクを参照してください:http://stackoverflow.com/help/how-to-answerスタックオーバーフローのガイドに従って良い答えを書くには、リンクに関連する引用符がリンクから付随する必要があります。たとえば、opsの質問に関連するリンクからテキストをコピーし、リンクに関連して挿入します。これにより、たとえリンクが機能しなくなっても、役立つコンテキストがいくつか追加されます。 :) –

関連する問題