获得基于(-2)的二进制位的算法

时间:2017-01-08 21:24:23

标签: algorithm math logic

我想知道用于获得特定数字的基于(-2)的二进制位的好算法。

因此,让我定义基于(-2)的二进制位。 位是二进制元素1或0的数组。 此K长度位N所代表的数字A计算如下:

K = A[0] * (-2 ^ 0) + A[1] * (-2 ^ 1) + A[2] * (-2 ^ 2) + ... +  + A[N-1] * (-2 ^ (N-1))

例如,位00011代表数字8,因为

1*(-2^4) + 1*(-2^3) + 0*(-2^2) + 0*(-2^1) + 0*(-2^0)

所以问题是当数字被定义时,计算上述最短位的好算法是什么。

1 个答案:

答案 0 :(得分:4)

Wikipedia显示了这种令人惊讶的方法:

unsigned int toNegaBinary(unsigned int value) // input in standard binary
{
    unsigned int Schroeppel2 = 0xAAAAAAAA; // = 2/3*((2*2)^16-1) = ...1010
    return (value + Schroeppel2) ^ Schroeppel2; // eXclusive OR
    // resulting unsigned int to be interpreted as string of elements ε {0,1} (bits)
}