我有一个名为的函数,它用以下限制replaceByte(x,n,c)
替换字节:n
x
c
- 从 0 (LSB) 到 3 (MSB) 编号的字节
- 例子:
replaceByte(0x12345678,1,0xab) = 0x1234ab78
- 您可以假设 0 <= n <= 3 和 0 <= c <= 255
- 法律行动:
! ~ & ^ | + << >>
最大操作数:10
int replaceByte(int x, int n, int c) { int shift = (c << (8 * n)); int mask = 0xff << shift; return (mask & x) | shift; }
但是当我测试它时,我得到了这个错误:
错误:测试 replaceByte(-2147483648[0x80000000],0[0x0],0[0x0]) 失败... ...给出 0[0x0]。应该是-2147483648[0x80000000]
在意识到 * 不是合法运算符后,我终于弄清楚了……如果您好奇,这就是我所做的:
int replaceByte(int x, int n, int c) {
int mask = 0xff << (n << 3);
int shift = (c << (n << 3));
return (~mask & x) | shift;
}