Ich habe eine Hex-Nummer 0x8F
(10001111 binär). Ich möchte diesen Wert nach rechts verschieben, also wäre der neue Wert 0xC7
(11000111). Ich habe versucht, mit:Wie man Bits in C++ richtig verschiebt?
unsigned char x = 0x8F;
x=x>>1;
aber anstelle von 0xC7 Ich habe 0x47? Irgendwelche Ideen, wie man das macht?
Das erwartete Ergebnis ‚0xC7'is falsch - also signed Verschiebungen Implementierung definiert - aber Sie haben einen Wert ohne Vorzeichen hier –
Wenn Sie es' ändern char' statt 'unsigned char' erhalten Sie das Verhalten, das Sie erwarten. Bei unsigned ist das Vorzeichenbit immer 0. Bei Vorzeichen werden Sie das höherwertige Bit umschalten, so dass negative Zahlen mit 1 anstelle von 0 gefüllt werden. – Charlie
@Charlie: Solange "char" signiert ist und ein signed verschoben wird Wert gibt Vorzeichenerweiterung. Keine davon ist in C++ garantiert. –