私はわからないが!
~
&
^
|
+
<<
>>
はビット演算子を使ってforループの機能を複製
int loop(int x) {
for (int i = 1; i < 32; i += 2)
if ((x & (1 << i)) == 0)
return 0;
return 1;
}
イム含むだけビット単位や特定の演算子を使用して、ループの機能を再現しようとしていますこれらの演算子だけを使ってループの累積性質を再現する方法。私はシフトを理解しています<<
>>
は、私が乗算し、分割することができます。しかし、操作を使用して!
&
^
~
がより困難であることが証明されています。任意のヒント?
http://www.tutorialspoint.com/cprogramming/c_operators.htm
編集: Iは、ビットの添加は、このような出力は、最初しばらくを呼び出さずに、またはループのために達成することができない方法が、達成することができる方法を理解します。
まず、関数が実際に何をしているのかを考える - あなたがどのようにしていることだろう、彼らはすべて1かどうかを確認するために、すべての奇数ビットをテストしていますビット演算子を使用して単一の操作で? (think masks) –
@PaulR okだから、すべての偶数ビットが1に設定されたマスクを作成し、与えられた値と比較して、if((value&bit_mask)== 0)奇数0x55は私と比較する値を与えます。私は==しかし同様に使用しています。 – Silverfin
これはリンクされた質問とどのように重複していますか? – Holt