Hallo,
C kann nur logisch Verschieben.
http://de.wikipedia.org/wiki/Bitweis...e_Verschiebung
http://de.wikipedia.org/wiki/Bitweis...#C_und_C.2B.2B
MfG Peter(TOO)
Hallo zusammen,
immer mal wieder stolpere ich über >> oder << in C, aber wirklich verstanden habe ich Schieben und Rollen noch nicht.
Hat da jemand vielleicht ne idiotensicherer Erklärung parrat?
Hallo,
C kann nur logisch Verschieben.
http://de.wikipedia.org/wiki/Bitweis...e_Verschiebung
http://de.wikipedia.org/wiki/Bitweis...#C_und_C.2B.2B
MfG Peter(TOO)
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Wo kommt denn das "Rollen" vor? Hast Du da einen Hinweis für uns, einen Link oder so ?... stolpere ich über >> oder << in C, aber wirklich verstanden habe ich Schieben und Rollen noch nicht ...
Die Links von Peter(TOO) zum Wikipedia geben ja ne gute Vorstellung zum Schieben, und die Operatoren heißen ja auch shift-Operatoren. Rollen KÖNNTE aus der Assemblerecke kommen bei der es (z.B. bei den Atmels) ein rotate gibt.
Unterschiede treten auf: shift ist nur innerhalb der Bitbreite des (linken) Operanden definiert - in meinem KernighanRitchie steht noch die anschauliche Erläuterung:
Der Wert von E1<<E2 ist E1 (interpretiert als Bit-Muster) um E2 Bits nach links verschoben. Wenn kein Overflow eintritt, ist das äquivalent zu einer Multiplikation mit mit 2E2. Der Wert von E1>>E2 ist E1 um E2 Bit-Positionen nach rechts verschoben. ... Es gibt implementierungsabhängige Sonderfälle.
Beim rotate gehts ja üblicherweise durchs Carry hindurch, da taucht z.B. der Overflow "hinten" wieder im Ergebnis auf, hier mal zwei Zitate aus der Assemblerhilfe zum Atmel-Befehlssatz:
Das Carry nimmt also in beiden Fällen den Overflow auf, aber der wird nur beim Rotate weiter verarbeitet. Das Rotate und das Shift gehen rechts sinngemäß.Code:ROL - Rotate Left trough Carry Description: Shifts all bits in Rd one place to the left. The C flag is shifted into bit 0 of Rd. Bit 7 is shifted into the C flag. This operation, combined with LSL, effectively multiplies multi-byte signed and unsigned values by two. Operation: C ¨ b7 ------------------b0 ← C Syntax: Operands: Program Counter: (i)ROL Rd 0 ≤ d ≤ 31 PC ← PC + 1 ================================= >< =================================== LSL - Logical Shift Left Description: Shifts all bits in Rd one place to the left. Bit 0 is cleared. Bit 7 is loaded into the C flag of the SREG. This operation effectively multiplies signed and unsigned values by two. Operation: C ¨ b7 ------------------b0 ← 0
Ciao sagt der JoeamBerg
Geändert von PICture (08.10.2014 um 11:14 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Hols der Geier
Rollen = Rotate
Ist auch in meinem Link beschrieben.
Rollen können eigentlich alle CPUs. Den Befehl benötigt man, wenn man mehr Bits schieben will, als in ein Register passen.
Man fängt mit einer Schiebung an, das Bit welches rausfällt wird dann im Carry abgelegt.
Beim nächsten Wert wird dann rotiert. Dabei wird das Carry eingeschoben und das rausfallende Bit landet wiederum im Carry.
So kann man beliebig lange Bitfolgen schieben.
Schieben gibt's dann noch als logisch und Arithmetisch.
Wobei eigentlich nur die Schiebung nach rechts unterschiedlich ist. Beim arithmetischen rechts Schieben wird das MSB verdoppelt, weil es als Vorzeichen behandelt wird.
Die Schiebe- und Rollbefehle sind die Grundlage für Multiplikation und Division.
Der 6502 hatte noch keine Befehle für Multiplikation und Division, dazu brauchte man Assembler Unterprogramme.
Auf C-Ebene werden die Schiebeoperationen hauptsächlich für "Bit-Fummeleien" verwendet.
MfG Peter(TOO)
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Ich muss mri das einfach noch 2-3 Mal in Ruhe durchlesen. Konkret im Zusammenhang mit C hab ich Rotieren meine ich noch nicht gelesen. Aber mir geht es ja darum beides prinzipiell zu verstehen
@Peter: Genau für so "Bit-Fummeleien" in C interessierts mich ja
Hatte da z.B. mal ein Beispielscript zu nem i2c-Temperatursensor, wo das Verständnis daran gescheitert ist. Damit will ich mich demnächst nochmal befassen, das verlangt mein Ego
Lesezeichen