是否有任何对(x,y)使z = x<<1
和z == y>>1
位于x != y
?
假设我们有x = 0010且y = 1000
现在如果我们将左x向左移动并向右移y乘以1
即,x <1 = 0100且y&gt;> 1 = 0100因此我们对两种情况都有相同的结果,即0100
那么还有其他对(x,y)给出相同的结果z?
如果是,那么是否有任何等式来找出这样的对?
答案 0 :(得分:3)
@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是偶数。 所以x的任何值都有(y)方程对应的y。
同样,x * 4是偶数,x * 4 + 1是奇数,所以任何 x的值通过(奇数y)方程具有对应的y。
因此,这些值很容易生成。
这假设无限精度整数。如果您正在使用N位字大小的实际CPU,则X> = 2 ^ N / 4的值将不起作用,因为典型的移位将丢失顶部的位。
答案 1 :(得分:0)
一般来说,一个数字的左移是(数字^ number_of_left_shifts),一个数字的右移是一个(数字/ number_of_right_shifts)
您可以尝试使用以下等式, 的x ^ 1 = Y / 2 Y = 2(X ^ 1)
只有一个左移或右移的上述等式尝试用你需要的number_of_shifts替换
答案 2 :(得分:0)
将a,b值替换为满足以下等式 一个^ 2 = B / 4 B = 4的(a ^ 2)