得到连续数范围的按位XOR乘积

时间:2014-01-23 10:28:07

标签: c++ c algorithm bit-manipulation

  

您将获得两个号码0<=M<N和   必须检索按位XOR产品   范围[M,N]中的数字。

     

例子:给出3个数字A,B,C,   按位XOR产品定义为   A bitwiseXOR B bitwiseXOR C

因此产品的位i是位置i范围内数字的所有位的XOR结果。

还有一个约束,算法必须在对数时间内工作。

我尝试解决这个问题的方法如下:

num_bits = log(max(M,N));

for(i=0;i<num_bits;i++)
{
    lsbM = M&1;
    lsbN = N&1;
    result |= bitwiseXor(lsbM,lsbN)<<1;
    M>>=1;
    N>>=1;
}

我没有找到写int bitwiseXor(int lsbM, int lsbN)的正确规则。 这是作业,它不是“我需要2个小时内的解决方案,因为我有一个面试”类型的问题。这不过是一个问题,我决定试一试。

修改 例子A = 8,B = 9,C = 10

    A:  1000
    B:  1001
    C:  1010
result  1011     

bitwiseXor(lsbM,lsbN)返回结果中位置i的位值

0 个答案:

没有答案