私はインターリーブしようとしています(モートンコードを計算するため)2つの符号付きの長い数字 x
とy
(32ビット)を値で
ケース 1 :
x = 10; //1010
y = 10; //1010
結果は次のようになります:
11001100
ケース 2:
x = -10;
y = 10;
バイナリ表現は、
x = 1111111111111111111111111111111111111111111111111111111111110110
y = 1010
インターリーブの場合、次のコードを使用して、 の31 番目のx
ビットと の 31番目のビットをインターリーブできる 32 ビット表現のみを検討しています。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 ビットを使用します。間違っている場合は修正してください。