7

ビットごとの AND 演算で構成される逆計算を行う必要がありますが、どうすればよいですか?

排他的論理和を試しましたが、役に立ちませんでした。

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

うまくいきません。その計算はどうすればいいですか?

4

6 に答える 6

30

与えられiた、あなたは戻ることができません254。それ&を ing することで、2 番目のビットに格納されていないデータを破棄しました。

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

失われた 6 ビットをどのように回復しますか? の場合x & 2 == 2、ほとんど何でも入れることができx、それは真実です。

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

x254 ですか、それとも 42 ですか。わかりません。

于 2009-04-23T19:49:28.853 に答える
22

技術的に AND の反対は NAND です。

~( 254 & 2 )

~ は補数演算子であり、ビット単位の NOT を実行することに注意してください (各ビットを反対に切り替えます)。

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

計算を元に戻そうとしても、できません。inverseand(and(x, y)) が x または y を返すような逆関数はありません。

-アダム

于 2009-04-23T19:49:46.980 に答える
3

できません。& を実行したときにそこにあったデータが失われました。

4 ビットの例:

1110 & 0010 = 0010

結果 0010 と & の 2 番目のオペランド (これも 0010) しかわからない場合、どのビットが 1 で、どのビットが 1 でないかを知る方法はありません。

于 2009-04-23T19:49:07.623 に答える
1

ウィキペディアには、C および Java でのビット単位の操作、その仕組み、構文に関する優れた記事があり、C# と非常によく似ています。

http://en.wikipedia.org/wiki/Bitwise_operation

もちろん、MSDN には、ビットごとの演算子と論理演算子のそれぞれについてのドキュメントもあり、それぞれに例があります。

http://msdn.microsoft.com/en-us/library/6a71f45d(vs.71).aspx

于 2009-04-23T19:55:44.360 に答える
0

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

すなわち:

val = val | 2;

これにより、現在ビット 2 にある値が上書きされ、他のビットには影響しません。

バイト内の 8 ビットが完全に独立したビットであると見なされる場合、他のビットに触れることでそれらのいずれかを変更することができます。

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

于 2009-04-26T08:50:44.467 に答える
0

逆算ってどういう意味ですか?

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

254 & 2 を計算することは、レジスタのビット番号 2 が設定されているかどうかを確認することと同じです。

これの反対は何ですか?他のすべてのビットが設定されているかどうかを確認していますか?

于 2009-04-23T19:59:01.700 に答える