Sto cercando di implementare una funzione di rotazione che ruota sinistra un intero x data da n bitBitwise ruotare funzione
lasciato- Es: rotateLeft (0x87654321,4) = 0x76543218
- ops legali: ~ &^| + < < >>
Finora ho questo:
int rotateLeft(int x, int n) {
return ((x << n) | (x >> (32 - n)));
}
che ho capito di non lavorare per integers..does firmato Qualcuno ha qualche idea su come risolvere questo problema?
così ora ho provato:
int rotateLeft(int x, int n) {
return ((x << n) | ((x >> (32 + (~n + 1))) & 0x0f));
}
e riceve l'errore:
ERRORE: test rotateLeft (-2147483648 [0x80000000], 1 [0x1]) non è riuscito ... ... Dà 15 [0xf]. Dovrebbe essere 1 [0x1]
Pensa al motivo per cui la tua espressione non funziona per interi con segno e cosa potresti fare per la parte a destra dell'operatore o per farlo funzionare. Inoltre, si noti che '-' non fa parte dell'elenco degli operatori legali, quindi è necessario correggerlo. –
ok quindi penso di aver capito come sbarazzarmi di - by (32 + (~ n + 1)) ma sto avendo problemi a capire cosa posso fare dopo il | per fare questo lavoro – asdfghjkl
puoi creare una maschera e l'estranea 1 bit di distanza? –