1

私はインターリーブしようとしています(モートンコードを計算するため)2つの符号付きの長い数字 xy(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 ビットを使用します。間違っている場合は修正してください。

4

1 に答える 1