これらの演算子のみを使用していくつかの関数を実行するように要求する割り当てがあります。
!〜&^ | + << >>
いくつかの問題では、整数xを、1が含まれている場合はすべて1にし、0の場合は0のままにしておくと便利です。これを行う理由は、次のようにyまたはzを返すことができるようにするためです。
// One of the two conditional values is now 0
int conditionalA = mask&y;
int conditionalB = ~mask&z;
// One of the values is combined with 0 using |
int out = conditionalA|conditionalB;
return out;
私がこのようなマスクを作ったところ:
// Make any x other than 0 all 1s
int mask = x;
mask |= mask>>1;
mask |= mask>>2;
mask |= mask>>4;
mask |= mask>>8;
mask |= mask>>16;
mask |= mask<<1;
mask |= mask<<2;
mask |= mask<<4;
mask |= mask<<8;
mask |= mask<<16;
すべての1または0をマスクするためのより良い方法があるはずですが、これ以上の効率的な解決策は考えられません。繰り返しますが、xが0の場合、0が0のままであることが重要です。
編集:ステートメントがオプションでない場合