Ich habe ein wenig Mühe, meinen Code zu schreiben, um meine hexadezimalen Ziffern nach rechts zu drehen. Unten ist eine Funktion, die ich geschrieben habe, wo, wenn Sie es aufrufen, es so übergibt: rotr (0x12345678, 4), sollte es 0x81234567 zurückgeben. Stattdessen gibt es nur 7 Ziffern zurück (im Gegensatz zu acht, wie im ursprünglichen Wert = 0x12345678).C - Ich habe Probleme beim Kodieren einer "rechtsdrehend" -Funktion
Kann mir bitte jemand helfen zu verstehen, was in der Bit-Ebene vor sich geht? Ich habe Probleme zu verstehen, warum mein aktueller Code 0x123456f anstelle von 0x81234567 zurückgibt. Danke im Voraus!
Edit: ist es, weil ich 0x12345678 zu früh verschiebe? Ich versuche hauptsächlich herauszufinden, warum nur sieben Ziffern zurückkommen, im Gegensatz zu acht.
unsigned int rotr(unsigned int x, int n) {
int i; //iterate for loop
unsigned int y; //masked last bit
unsigned int z; //final result
for (i=1; i<=n; i++) {
y = x & 0x1; //isolates last bit
x = x >> 1; //shift right 1
z = x | (y << (sizeof(x)-1)); //shifts mask back to first slot; OR
//it with x
}
return z;
}
'sizeof (x)' ist 4, aber Sie wollen es 32, richtig? –
Versuchen Sie, ein einzelnes Bit oder eine Gruppe von vier Bits zu drehen, die mit einer einzelnen Hexadezimalziffer bezeichnet werden? –
Sie scheinen zwischen Bits und Hex-Ziffern gemischt. Jede hexadezimale Zahl repräsentiert 4 Bits –