是否存在满足 x<<1 == y>>1 的 (x,y) 对?
are there any pairs (x,y) such that x<<1 == y>>1?
是否有任何对 (x,y) 使得 z = x<<1
和 z == 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。
因此,这些值很容易生成。
- 选择任意 X。
- X*4 和 X*4+1 都是 Y 的有效值。
- Z 是 X*2
这假设无限精度整数。如果您正在使用 N 位字长的真实 CPU,则 X>=2^N/4 的值将不起作用,因为典型的移位会丢失顶部的位。
是否有任何对 (x,y) 使得 z = x<<1
和 z == 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。
因此,这些值很容易生成。
- 选择任意 X。
- X*4 和 X*4+1 都是 Y 的有效值。
- Z 是 X*2
这假设无限精度整数。如果您正在使用 N 位字长的真实 CPU,则 X>=2^N/4 的值将不起作用,因为典型的移位会丢失顶部的位。