2009-04-23 12 views
6

ビット単位のAND演算からなる逆計算を行う必要がありますが、どうすればよいですか?C#のビット単位のANDの逆数は何ですか?

私は排他的ORを試みましたが、助けになりませんでした。

 int i = 254 & 2; 
     Console.Write("254 & 2 ={0}", i + "\n"); 
     Console.Write("{0}^2 ={1}",i, (i^2) + "\n"); 

動作しません。その計算をどのように行うのですか?

+3

「動作しない」と言ったら、どういう意味ですか?それは私のために期待される結果を集めて作り出します。どのような結果があなたのために表示されますか、さらに重要なことは、結果があなたに表示されたがっていますか? –

+0

あなたが持っている可逆ビット操作はXORなので、 '(a^b)^ b == a'です。操作を元に戻し、ANDを使用して死んでいない場合は、代わりにこれを試してください。 – Blindy

答えて

27

iを指定すると、254を返すことはできません。 &によって、2番目のビットに格納されていないデータが破棄されています。

1111 1110 
&0000 0010 
---------- 
0000 0010 

どのように6ビットを回復しますか? x & 2 == 2については、ほとんどすべてxを置くことができ、それは本当です。

0010 1010 // = 42 
&0000 0010 
---------- 
0000 0010 

x 254または42ですか?あなたは分からない。

3

あなたは&を行ったときにそこにあったデータを失ってしまいました。

4ビットの例:

1110 & 0010 = 0010 

あなたはビットが1であったし、あなただけの結果0010と&(も0010)の第二オペランドを知っていればされなかった知る方法はありません。

21

技術の反対AND NANDである:〜は、相補演算子であり、ビット単位が(そのする各ビットをトグルしないこと

〜(254 & 2)

注反対)。

あなたは正確に何をしたいですか?あなたは何を達成しようとしていますか?

計算を元に戻そうとしている場合、inverseand(and(x、y))がxまたはyを返す逆関数はありません。

-Adam

+2

+1私は*あなたが正しい軌道に乗っていると思うからですが、主に「何が欲しいのですか」という質問があります。本当にここで問題になっています...彼が何をしようとしているかは完全にはっきりしていません。 – Beska

0

反対の計算はどういう意味ですか?

数字254が8ビットからなるビットレジスタとして表示された場合、最後のビットを除くすべてのビットが1に設定されます。

計算254 & 2は、レジスタのビット2がセットされているかどうかをチェックするのと同じです。

これの反対は何ですか?他のすべてのビットがセットされているかどうかチェックしますか?

0

&操作の目的は、ビット1が設定されているかどうかを確認することである場合、潜在的な「反対の」操作は「ビット1を設定」です。

すなわち:

val = val | 2; 

これはビット2で現在の値を上書きし、そして任意の他のビットに触れていません。

バイトの8ビットが完全に独立したビットであると考えられる場合、他のビットのどれかに触れてそれらのビットを変更することができます。

この場合、元の情報の一部が失われたことはありません。実際には、他のビットがどのような価値を持っていたかは気にしません。ビットマスクを使用すると、問題のビットの元の値はゼロになります。

関連する問題