tengo una función llamada replaceByte(x,n,c)
que es reemplazar bytes n
en x
con c
con las siguientes restricciones:reemplazar byte de 32 bits número
- Bytes numeradas del 0 (LSB) a 3 (MSB)
- Ejemplos:
replaceByte(0x12345678,1,0xab) = 0x1234ab78
- se puede asumir 0 < = n < = 3 y 0 < = c < = 255
- ops legales :
! ~ &^| + << >>
ops Max: 10
int replaceByte(int x, int n, int c) { int shift = (c << (8 * n)); int mask = 0xff << shift; return (mask & x) | shift; }
pero cuando lo pruebo me sale este error:
ERROR: Prueba replaceByte (-2147483648 [0x80000000], 0 [0x0], 0 [0x0]) falló ... ... Da 0 [0x0]. En caso de ser -2147483648 [0x80000000]
después de darse cuenta de que * no es un operador jurídico fin he descubierto ... y si usted es curioso, esto es lo que hice:
int replaceByte(int x, int n, int c) {
int mask = 0xff << (n << 3);
int shift = (c << (n << 3));
return (~mask & x) | shift;
}
hmmm incluso con eso, estoy obteniendo el mismo error – asdfghjkl
@shaynie Vea mi edición –
¿Puede explicar cómo funciona?> "máscara int = 0xff << cambio;" funciona para usted. Parece incorrecto yo. Al igual que OP actualizado probablemente ser "int mask = 0xff << (n << 3);" –