【发布时间】:2012-10-01 12:08:40
【问题描述】:
我的算法有问题。
我有一个用于 IO 的字节,其中某些位可以使用称为 XorAndXor 的方法设置。 该算法的工作原理如下:
newValue = (((currentValue XOR xorMask1) AND andMask) XOR xorMask2)
描述如下:
如果两个异或掩码具有相同的值,则此函数插入 xor-mask 的位到 and-mask 所在的位位置 1.其他位保持不变。
所以我对这个函数的期望是当我有以下字节时:00101101 并且我将01000000 用于 xor-masks 和 and-mask,只有第二个位将设置为 1 和结果将是01101101。
但是,在进行数学运算并遍历函数时,结果是 00000000。
我做错了什么,或者这个功能有什么我不明白的地方?这种底层编程已经有一段时间了,所以我真的不知道这是否是一种经常使用的方法,以及为什么以及如何使用它。
让我问一个简单的问题:有没有办法有效地使用这个函数来设置(或取消设置/更改)单个位(无需专门询问当前值)? p>
例如:当前值为00101101(这个我不知道),但我只是想确保第二位被设置,所以结果一定是01101101 .
重要信息在我的文档 PDF 中,XOR 和第一个 xorMask1 之间似乎有一点空间,所以这可能是 ~ 或 ! 或其他一些否定符号的位置由于一些奇怪的编码问题,它很可能会丢失。因此,我将测试该函数是否符合文档所述或函数声明所述。抓紧你的头盔,将返回结果(请鼓)....
【问题讨论】:
-
我承认我有点不知所措,想着如何用位运算符检查掩码(不是单个位,而是整个掩码)的相等性。
-
好吧,我只想提交两次相同的掩码,所以如果我想将第 2 位设置为 1,我将输入
01000000作为 mask1 和 mask2。 -
好吧,答案很少,问题不是我不知道 XOR 和 AND 做什么,只是我很难弄清楚函数想要什么。这就是为什么我要问这是否是某种经常使用的行为。
-
我认为应该是
~andMask而不是andMask- 请参阅下面的答案
标签: c++ bitwise-operators