是否存在满足 x<<1 == y>>1 的 (x,y) 对?

are there any pairs (x,y) such that x<<1 == y>>1?

是否有任何对 (x,y) 使得 z = x<<1z == y>>1 其中 x != y?

假设我们有 x=0010 和 y=1000
现在如果我们将 x 左移 1 并将 y 右移 1
即 x<<1=0100 和 y>>1=0100 所以我们对这两种情况都有相同的结果 0100

那么是否有任何其他对 (x,y) 给出相同的结果 z ?

如果是,那么是否有任何方程可以找出这样的对

一般数的左移是(number^number_of_left_shifts),数的右移是(number/number_of_right_shifts)

您可以尝试使用以下等式, x^1=y/2 y=2(x^1)

上面的方程只有一次左移或右移尝试用你需要的number_of_shifts代替

代入a,b值使其满足以下等式 ^2=b/4 b=4(a^2)

@doynax 观察到:

x << 1 = y >> 1 <=> x * 2 = floor(y / 2)

如果 y 是偶数,则使用 floor(y/2)==y/2; floor(y/2)=(y-1)/2 如果y是奇数,我们得到两个方程:

(even y):   x * 2 = y / 2
(odd y):    x * 2 = (y-1)/2

简化:

(even y)    x * 4 = y
(odd y)     x * 4 = y - 1  ==>   x * 4 + 1 = y

我们注意到 x * 2,因此 x * 4 是偶数。 因此,通过(偶数 y)等式,x 的任何值都有对应的 y。

同理,x * 4 是偶数,x * 4 + 1 是奇数,所以任意 x 的值通过(奇数 y)等式具有相应的 y。

因此,这些值很容易生成。

  1. 选择任意 X。
  2. X*4 和 X*4+1 都是 Y 的有效值。
  3. Z 是 X*2

这假设无限精度整数。如果您正在使用 N 位字长的真实 CPU,则 X>=2^N/4 的值将不起作用,因为典型的移位会丢失顶部的位。