2016-03-27 28 views
0

intを32ビットまで与えることができる関数を作成する必要がありました。奇数ビットが1であれば1を返し、そうでなければ0を返すと仮定する。私はそれがマスクと一致しない場合はゼロを返しますが、私はそれがマスクに一致する場合、それが返される理由は理解しません。それは&の比較の結果が0に等しくないため、trueを返しますか?結果が1である理由を理解しない

int any_odd_one(unsigned x) 
{ 

return (x&0xAAAAAAAA)!=0; 
+0

あなたはそれがうまくいかないとか、それがうまくいかない理由を理解できないと言っていますか? Cでのブール式の結果は '0'または' 1'です。 '&'は「比較」ではなく、ビット単位のマスクです。比較は '!='で行われます。 –

+0

それは動作しますが、なぜそれが1を返していたのか分かりませんでした。そして、私の質問に答えることに感謝します。 – Stan

答えて

0

&それが彼らの「と」操作を行って、右引数から左引数と同じビットからのビットを取ることによって動作し、それが結果としてを保存し、ビット単位のAND演算子です結果のビット。これはすべてのビットに対してこれを行います。

両方の引数が '1'の場合に 'and'の結果が1になる可能性があるため、0xAAAAAAAAを1つの引数として使用すると、2番目の引数の各偶数ビットを '0'すべての奇数ビットをそのまま残す。

上記の結果が「0」の場合、すべての奇数ビットが「0」であることを意味します。

また、整数がブール値に変換されるときは、「0」以外はtrueに変換されます。

関連する問題