我有一个接收 3 个参数的方法:int x、int n 和 int m。它返回一个交换了 x 的第 n 个和第 m 个字节的 int
x 只是一个普通整数,设置为任何值。n 和 m 是 0 到 3 之间的整数。
例如,设 x 的十六进制表示为 0x12345678,n 为 0,m 为 2。最后一个和倒数第三个字节应该是交换的(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;
}
`
还有一些额外的限制 - 只允许以下内容:
~ & ^ | ! + << >>
(这意味着没有- * /
,循环,if
s等。但是,可以初始化其他变量并且添加仍然可以。)
我的代码可以提取第 n 个和第 m 个字节,但我不知道如何在不使用 ifs 的情况下重组所有内容。