私はコードフェアで問題を解決しようとしていますが、ネットを閲覧した後、私はこの解決策を見つけました。&aの目的は何ですか
a * (a & 1)^b * !(b & 1)^!!(((a^b) + 1) & 2)
私はコードフェアで問題を解決しようとしていますが、ネットを閲覧した後、私はこの解決策を見つけました。&aの目的は何ですか
a * (a & 1)^b * !(b & 1)^!!(((a^b) + 1) & 2)
単一&
結果は、オペレータの左右両側に設定されているビットであることを意味し、ビット単位で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。答えをしないにして、外部のリンクから関連する部分を抽出してください
を見ます死んだリンクに脆弱です:) –
@ TommyAndersenどのようにこれを行うには?何も助けられない? – Real73
このリンクを参照してください:http://stackoverflow.com/help/how-to-answerスタックオーバーフローのガイドに従って良い答えを書くには、リンクに関連する引用符がリンクから付随する必要があります。たとえば、opsの質問に関連するリンクからテキストをコピーし、リンクに関連して挿入します。これにより、たとえリンクが機能しなくなっても、役立つコンテキストがいくつか追加されます。 :) –