我有一個名爲replaceByte(x,n,c)
函數是在x
與c
有以下限制替換字節n
:替換字節數
- 字節從0(LSB)到3號(MSB)
- 實例:
replaceByte(0x12345678,1,0xab) = 0x1234ab78
- 可以假定0 < = N < = 3和0 < = C < = 255個
- 法律OPS :
! ~ &^| + << >>
最大OPS:10
int replaceByte(int x, int n, int c) { int shift = (c << (8 * n)); int mask = 0xff << shift; return (mask & x) | shift; }
,但是當我測試它,我得到這個錯誤:
ERROR:測試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;
}
嗯即使是這樣,我得到的是同樣的錯誤 – asdfghjkl 2012-04-13 03:24:03
@shaynie看我的編輯 – 2012-04-13 03:42:19
你能解釋一下 - >「int mask = 0xff << shift;」是否適合你。我可能應該更新OP是「int mask = 0xff <<(n << 3);」 – 2016-02-19 02:42:55