バイトインを次の制限で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;
}