是否存在任何对(x,y),使得x <1 = y&gt;> 1?

时间:2016-06-18 06:43:05

标签: binary integer bit-manipulation bit-shift

是否有任何对(x,y)使z = x<<1z == y>>1位于x != y

假设我们有x = 0010且y = 1000
现在如果我们将左x向左移动并向右移y乘以1 即,x <1 = 0100且y&gt;> 1 = 0100因此我们对两种情况都有相同的结果,即0100

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

如果是,那么是否有任何等式来找出这样的对

3 个答案:

答案 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。

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

  1. 选择任何X。
  2. X * 4和X * 4 + 1都是Y的有效值。
  3. Z是X * 2
  4. 这假设无限精度整数。如果您正在使用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)