我想知道用于获得特定数字的基于(-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)
所以问题是当数字被定义时,计算上述最短位的好算法是什么。
答案 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)
}