アルゴリズムに問題があります。
XorAndXorというメソッドで特定のビットを設定できるIOに使用されるバイトがあります。アルゴリズムは次のように機能します。
newValue = (((currentValue XOR xorMask1) AND andMask) XOR xorMask2)
説明は次のとおりです。
両方の xor-mask の値が同じ場合、この関数は、and-mask が 1 であるビット位置に xor-mask のビットを挿入します。他のビットは変更されません。
したがって、この関数に期待するのは、次のバイトがある場合です。xor マスクと and マスクの両方00101101
に使用すると、2 番目のビットのみが 1 に設定され、結果は.01000000
01101101
ただし、数学を実行して関数を実行すると、結果は00000000
.
私は何が間違っているのですか、それともこの機能について私が理解できない何かがありますか? この種の低レベルのプログラミングは久しぶりなので、これが頻繁に使用される方法論なのか、なぜ、どのように使用すべきなのか、よくわかりません。
この簡単な質問をさせてください:この関数を効果的に使用して単一のビットを設定 (または設定解除/変更) する方法はありますか (現在の値を具体的に尋ねることなく)。
例:現在の値は00101101
(わかりません) ですが、2 番目のビットが設定されていることを確認したいだけなので、結果は01101101
.
重要な情報私のドキュメント PDF では、XOR と最初の xorMask1 の間に少しスペースがあるようです。そのため、これは~
または!
またはその他の否定記号があった場所である可能性があり、いくつかの奇妙なエンコーディングの問題のために失われる可能性が非常に高いです. したがって、関数がドキュメントの内容または関数宣言の内容を実行するかどうかをテストします。ヘルメットをかぶって、結果を投稿します(ドラムをお願いします)....