remplacer les octets en 32 bits

J'ai une fonction appelée replaceByte(x,n,c) qui est de remplacer octet n dans x avec c avec les restrictions suivantes:

  • Octets numérotés à partir de 0 (LSB) à 3 (MSB)
  • Exemples: replaceByte(0x12345678,1,0xab) = 0x1234ab78
  • Vous pouvez supposer 0 <= n <= 3 et 0 <= c <= 255
  • Juridique ops: ! ~ & ^ | + << >>
  • Max ops: 10

    int replaceByte(int x, int n, int c) {
            int shift = (c << (8 * n));
            int mask = 0xff << shift;
            return (mask & x) | shift;
        }

mais quand je l'ai tester, j'obtiens cette erreur:

ERREUR: Test replaceByte(-2147483648[0x80000000],0[0 x 0],0[0x0]) n'a pas...
...Donne 0[0x0]. Devrait être de -2147483648[0x80000000]

après avoir réalisé que * n'est pas un opérateur, j'ai enfin compris...et si vous êtes curieux, c'est ce que j'ai fait:

int replaceByte(int x, int n, int c) {
  int mask = 0xff << (n << 3);
  int shift = (c << (n << 3));
  return (~mask & x) | shift;
}
InformationsquelleAutor asdfghjkl | 2012-04-12