Ich habe eine Funktion namens replaceByte(x,n,c)
dieses Byte n
in x
mit c
mit folgenden Einschränkungen zu ersetzen ist:ersetzen Byte in 32-Bit-Zahl
- Bytes nummeriert von 0 (LSB) bis 3 (MSB)
- Beispiele:
replaceByte(0x12345678,1,0xab) = 0x1234ab78
- Sie können 0 annehmen < = n < = 3 und 0 < = c < = 255
- Rechts 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; }
aber wenn ich es testen, bekomme ich diesen Fehler:
ERROR: Test replaceByte (-2147483648 [0x80000000], 0 [0x0], 0 [0x0]) fehlgeschlagen ... ... Gibt 0 [0x0]. Sollte -2147483648 [0x80000000]
danach zu realisieren * ist keine juristische Betreiber Ich habe es endlich herausgefunden ... und wenn Sie neugierig sind, ist es das, was ich getan habe:
int replaceByte(int x, int n, int c) {
int mask = 0xff << (n << 3);
int shift = (c << (n << 3));
return (~mask & x) | shift;
}
hmmm sogar mit dem, ich bekomme den gleichen Fehler – asdfghjkl
@shaynie Siehe meine Bearbeitung –
Können Sie erklären, wie -> "int Maske = 0xff << shift;" funktioniert für Sie. Scheint falsch zu Ich. Wie OP sollte wahrscheinlich aktualisiert werden sei "int mask = 0xff << (n << 3);" –