ビットごとの AND 演算で構成される逆計算を行う必要がありますが、どうすればよいですか?
排他的論理和を試しましたが、役に立ちませんでした。
int i = 254 & 2;
Console.Write("254 & 2 ={0}", i + "\n");
Console.Write("{0} ^ 2 ={1}",i, (i ^ 2) + "\n");
うまくいきません。その計算はどうすればいいですか?
ビットごとの AND 演算で構成される逆計算を行う必要がありますが、どうすればよいですか?
排他的論理和を試しましたが、役に立ちませんでした。
int i = 254 & 2;
Console.Write("254 & 2 ={0}", i + "\n");
Console.Write("{0} ^ 2 ={1}",i, (i ^ 2) + "\n");
うまくいきません。その計算はどうすればいいですか?
与えられi
た、あなたは戻ることができません254
。それ&
を ing することで、2 番目のビットに格納されていないデータを破棄しました。
1111 1110
&0000 0010
----------
0000 0010
失われた 6 ビットをどのように回復しますか? の場合x & 2 == 2
、ほとんど何でも入れることができx
、それは真実です。
0010 1010 // = 42
&0000 0010
----------
0000 0010
x
254 ですか、それとも 42 ですか。わかりません。
技術的に AND の反対は NAND です。
~( 254 & 2 )
~ は補数演算子であり、ビット単位の NOT を実行することに注意してください (各ビットを反対に切り替えます)。
しかし、あなたは正確に何を望んでいますか?何を達成しようとしていますか?
計算を元に戻そうとしても、できません。inverseand(and(x, y)) が x または y を返すような逆関数はありません。
-アダム
できません。& を実行したときにそこにあったデータが失われました。
4 ビットの例:
1110 & 0010 = 0010
結果 0010 と & の 2 番目のオペランド (これも 0010) しかわからない場合、どのビットが 1 で、どのビットが 1 でないかを知る方法はありません。
ウィキペディアには、C および Java でのビット単位の操作、その仕組み、構文に関する優れた記事があり、C# と非常によく似ています。
http://en.wikipedia.org/wiki/Bitwise_operation
もちろん、MSDN には、ビットごとの演算子と論理演算子のそれぞれについてのドキュメントもあり、それぞれに例があります。
http://msdn.microsoft.com/en-us/library/6a71f45d(vs.71).aspx
操作の目的が&
ビット 1 が設定されているかどうかを確認することである場合、可能性のある「反対の」操作は「ビット 1 の設定」です。
すなわち:
val = val | 2;
これにより、現在ビット 2 にある値が上書きされ、他のビットには影響しません。
バイト内の 8 ビットが完全に独立したビットであると見なされる場合、他のビットに触れることでそれらのいずれかを変更することができます。
この場合、元の情報の一部が失われても問題ありません。他のビットの値は実際には気にしません。ほとんどの場合、ビット マスクを使用する場合、問題のビットの元の値はとにかくゼロでした。
逆算ってどういう意味ですか?
数値 254 が 8 ビットで構成されるビット レジスタとして表示される場合、最後のビットを除くすべてのビットが 1 に設定されます。
254 & 2 を計算することは、レジスタのビット番号 2 が設定されているかどうかを確認することと同じです。
これの反対は何ですか?他のすべてのビットが設定されているかどうかを確認していますか?