算术移位分配率

Arithmetic shift distributivity

如果我有什么规则:

c = a xor (a>>b)

我知道c和b但不知道a。我该如何重写它才能解决?

所以基本上,我们不能只按照最初的建议重写方程式,但我们可以很容易地解决它:我们知道左狗屎只是加 0。示例如果 a = 123 和 b = 3:

a = 0b1111011
a >> 3 = 0b1111011000

现在假设我们只有 cb 并且我们正在尝试求解原始问题中提出的方程式。我们说

b = 3
c = 2889 = 0b101101001001

我们知道我们的操作会这样做:

a^a000 = 0b101101001001 (1)

由于xor是可逆的,我们可以改写(1):

a = 0b101101001001^a000

现在因为它是按位的,这已经给了我们 a 的最后 3 位数字:

a[-3:] = 001^000 = 001 (2)

现在我们的等式 (1) 变为,因为 a 的最后 3 个二进制数字是 a << 3 的第 6 到第 3 个数字:

a[:-3]001^a[:-3]001000 = 0b101101001001

我们再次重复 (2) 中的步骤,直到我们得到:

a[-6:] = 001001^001000 = 000001


a[-9:] = 101001001^000001000 = 101000001

Et voila,我们得到了原始的 a = 0b101000001 = 123