我正在尝试交错(用于计算 morton 代码)2 个带符号的长数字 x
和y
(32 位)值
情况1 :
x = 10; //1010
y = 10; //1010
结果将是:
11001100
案例2:
x = -10;
y = 10;
二进制表示是,
x = 1111111111111111111111111111111111111111111111111111111111110110
y = 1010
对于交错,我只考虑 32 位表示,我可以使用以下代码将 31 位x
与 31 位交错y
,
signed long long x_y;
for (int i = 31; i >= 0; i--)
{
unsigned long long xbit = ((unsigned long) x)& (1 << i);
x_y|= (xbit << i);
unsigned long long ybit = ((unsigned long) y)& (1 << i);
if (i != 0)
{
x_y|= (x_y<< (i - 1));
}
else
{
(x_y= x_y<< 1) |= ybit;
}
}
上面的代码工作正常,如果我们有x
正面和y
负面但案例2失败,请帮助我,出了什么问题?负数使用 64 位,而正数使用 32 位。如果我错了,请纠正我。