Ich habe die klassische Hacker Freude gelesen und ich habe Schwierigkeiten zu verstehen, den Unterschied zwischen logischer Verschiebung rechts, arithmetische Verschiebung rechts und rechts drehen. Bitte entschuldigen Sie, wenn der Zweifel zu einfach erscheint.Bitte erklären Sie den Unterschied zwischen logischer Verschiebung rechts, arithmetische Verschiebung rechts und rechts rotieren
Antwort
Denken Sie zunächst daran, dass Maschinenwörter eine feste Größe haben. Sprich 4, und dass Ihre Eingabe ist:
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
Dann ist alles um eine Position nach links schieben gibt:
+---+---+---+---+
| b | c | d | X |
+---+---+---+---+
Frage, was als X setzen?
- mit einem Verschiebung 0 setzen
- mit drehen
a
setzen
Jetzt ist alles um eine Position nach rechts schieben gibt:
+---+---+---+---+
| X | a | b | c |
+---+---+---+---+
Frage, was als setzen X?
- mit einer Verschiebung 0 gesetzt
- mit einer Stellenverschiebung setzen
a
- mit drehen
d
setzen
Grob.
Shift entspricht (linkshift) Multiplikation mit 2, (right-shift) ganzzahlige Division mit 2.
Arithmetische Verschiebung ist etwas in Bezug auf 2'-Komplement-Darstellung von vorzeichenbehafteten Zahlen. In dieser Darstellung ist das Vorzeichen das äußerste linke Bit, und die arithmetische Verschiebung bewahrt das Vorzeichen (dies wird Vorzeichenerweiterung genannt).
Drehen hat keine gewöhnliche mathematische Bedeutung und ist fast eine veraltete Operation sogar in Computern.
Der Unterschied ziemlich in der rechten Spalte erläutert.
- Logische Verschiebung behandelt die Zahl als ein Bündel von Bits und Verschiebungen in Nullen. Dies ist der -Operator in C.
Arithmetische Verschiebung behandelt die Zahl als eine Ganzzahl mit Vorzeichen (in 2s Komplement) und "behält" das oberste Bit bei Nullen, wenn das oberste Bit 0 war, und Einsen, wenn es war ein. Der Rechtsverschiebungsoperator von C hat ein implementierungsdefiniertes Verhalten, wenn die verschobene Zahl negativ ist.
Zum Beispiel wird die Binärzahl11100101
(-27 in Dezimal, angenommen 2s Komplement), wenn nach rechts geschoben 3 Bits mit logischer Verschiebung,00011100
(Dezimal 28). Dies ist eindeutig verwirrend. Unter Verwendung einer arithmetischen Verschiebung würde das Vorzeichen-Bit beibehalten werden, und das Ergebnis würde11111100
(Dezimal -4, was ungefähr gleich für -27/8 ist).Drehung tut auch nicht, da oberste Bits durch unterste Bits ersetzt werden. C hat keinen Operator, um eine Rotation durchzuführen.
Können Sie die arithmetische Verschiebung etwas deutlicher erklären? Und Beispiel bitte? –
@ChandrahasAroori gibt es Tonnen von Beispielen, die Sie auf Google https://en.wikipedia.org/wiki/Bitwise_operation finden können –
- 1. Verschiebung Zellen rechts ähnliche
- 2. Verschiebung der Tabellenzeilen nach rechts
- 3. Logische Verschiebung nach rechts in binärer Such
- 4. Verschiebung nach rechts und in einem Befehl hinzufügen
- 5. Warum führt die Verschiebung nach links und die Verschiebung nach rechts in derselben Anweisung zu einem anderen Ergebnis?
- 6. Bitte erklären Sie den Unterschied
- 7. Arithmetische bitweise Verschiebung rechts "a shr b" mit vorzeichenbehafteten Ganzzahlen, die in Variablen gespeichert sind - falsche Ergebnisse! Interner Delphi-Fehler?
- 8. CSS Float links, rechts, links, rechts ... und alle nach oben
- 9. Unexpected Rechts Shift-Operator Verhalten
- 10. signed Integer, arithmetische Verschiebung nach links
- 11. Körper in JS drehen, links wird rechts und rechts wird
- 12. Ausrichtungsschaltfläche rechts
- 13. Verschiebung zwischen 2 Bildern
- 14. Foundation 6 Reveal Verschiebung
- 15. Ziehen Sie den Navbar-Listenpunkt nach rechts.
- 16. >>> (Nullauffüllungs Verschiebung nach rechts), wenn der zweite oprand Null
- 17. Position relativ und rechts Eigenschaft
- 18. CSS Rahmen rechts Styling
- 19. Tabellenspalten links und rechts ausrichten
- 20. Rechts oben Constraint-Format
- 21. kleines Problem in Verschiebung Bereich bitte helfen Sie mir
- 22. Wie bitweise Verschiebung in VB.NET?
- 23. TextInputLayout Fehler rechts ausrichten
- 24. ein Array mit 1 nach rechts verschieben
- 25. Text links und Bild rechts
- 26. Unterschied zwischen Verknüpfung mit bitweise Verschiebung und Hex-Werte
- 27. Jsoncpp FastWriter rechts trimmen
- 28. Header-Abstand nach rechts?
- 29. UILabel Textausrichtung rechts
- 30. UIPanGestureRecognizer rechts und links tableviewcell
Was hat das mit C zu tun? –
Was ist los mit den Wikipedia-Artikeln? Was verstehst du nicht über sie? – Lundin
Ich habe den Unterschied zwischen der arithmetischen und logischen Verschiebung nicht verstanden. –