int x、int n、および int m の 3 つのパラメーターを受け取るメソッドがあります。x の n 番目と m 番目のバイトを入れ替えた int を返します。
x は通常の整数で、任意の値に設定されます。n と m は 0 から 3 までの整数です。
たとえば、x の 16 進表現を 0x12345678、n を 0、m を 2 とします。最後のバイトと最後から 3 番目のバイトが入れ替わることになっています (n = 78、m = 34)。
x から n 番目と m 番目のバイトを抽出する方法はわかりましたが、メソッドが返すはずの整数に 4 バイトすべてを再結合する方法がわかりません。
これが私の現在のコードです: `
int byteSwap(int x, int n, int m)
{
// Initialize variables which will hold nth and mth byte
int xn = x;
int xm = x;
// If n is in bytes, n << 3 will be the number of bits in that byte
// For example, if n is 2 (as in 2 bytes), n << 3 will be 16 (as in 16 bits)
xn = x >> (n << 3);
// Mask off everything except the part we want
xn = xn & 0xFF;
// Do the same for m
xm = x >> (m << 3);
xm = xm & 0xFF;
}
`
追加の制約がいくつかあります。次のもののみが許可されます。
~ & ^ | ! + << >>
(これは no - * /
、 loops 、if
s などを意味します。ただし、追加の変数を初期化することはでき、追加はまだ OK です。)
私のコードは n 番目と m 番目のバイトを抽出できますが、ifs を使用せずにすべてを再結合する方法がわかりません。