12

ですから、この質問はすでに行われているようですが、答えは少し曖昧で役に立たなかったのです。さて、「&^〜!+ |>><<」のみを使用してac式を実装する必要があります

式は次のようになっている必要があります。b:c

したがって、私が言えることから、式は次のようになる必要があります。

return (a & b) | (~a & c)

これは、a = 0の場合に機能します。これは、bを使用するとゼロが返され、or式は右辺を返す(~a & c)ためです。これは、〜0を使用するとすべてが1になり、cをすべて1にするとcが返されるためです。

ただし、これは> 0の場合は機能しません。誰かがこれがなぜであるか、またはそれを修正する方法を説明しようとすることができますか?

4

2 に答える 2

19

a、を使用してブール値に変換し、 !!a0または1を取得しますx = !!a

次に、2の補数でそれを否定します。単項マイナスを使用できないため、2の補数否定の定義を使用します。ビットを反転してから1を加算しますy = ~x + 1。これにより、すべてのビットがクリアされるか、すべてのビットが設定されます。

次にand、1つの変数を直接使用し、もう1つの変数y & bを逆にします~y & c。これにより、一方の式に0が与えられ、もう一方の式に元の変数が与えられます。これらをor一緒にすると、ゼロは効果がないため、元の変数を変更せずに取得します。

于 2012-04-05T19:15:24.197 に答える
3

つまり、aaがfalse(つまり0)の場合はすべてのビットを0に設定し、 atrue(つまりa > 0)の場合はすべてのビットを1に設定する必要があります。

前者の場合、作業はすでに完了しています。後者の場合-式の結果を計算してみてください~!1

于 2012-04-05T19:09:40.383 に答える