Gast
#502926
morgen! kann mir jemand sagen ob es in C einen Befehl gibt der das selbe macht wie der Assembler-Befehl "Swap"(sprichen der die nibbles eines Bytes tauscht). MFG Tom
|
Anzeige
|
swap-befehl in C?
Gast
#502926
morgen! kann mir jemand sagen ob es in C einen Befehl gibt der das selbe macht wie der Assembler-Befehl "Swap"(sprichen der die nibbles eines Bytes tauscht). MFG Tom
Gast
#502930
mach dir ein makro mit inline assembler...
Gast
#502931
Einen "Befehl" gibt es dafür nicht, aber man kann es mit
machen. besser so byte = (byte << 4) | ((byte >> 4)&0xf); sonst gehts schief, manchmal. Cheers Detlef
Gast
#502983
oder gleich so: byte = ((byte << 4)&0xF0) | ((byte >> 4)&0x0F); sonst gehts schief, ganz manchmal... ((byte << 4)&0xF0) Wozu willst du den &0xF0? Beim Linksschieben kommen von rechts immer 0-en nach. ((byte >> 4)&0x0F); Der ist in Ordnung. Abhängig davon ob byte signed oder unsigned ist und vom tatsächlichen Wert von byte können da von links auch 1-en reingeschoben werden.
Gast
#502999
@Karl Heinz: Jau, ist natürlich richtig. Ich war jetzt von unsigned ausgegangen, da es i.d.R. auch wenig Sinn macht, was vorzeichenbehaftetes zu "swappen". Aber man weiß ja nie, wo die Leute so drauf kommen und auch was der Compiler draus macht. Die Methode von C-Rahul ist mit Sicherheit die sicherste.
Gast
#503025
darum habe ich auch geschrieben "ganz manchmal". Denn ich verlasse mich nicht darauf, dass der Compiler das Carry vorher löscht oder einen Assemblerbefehl benutzt, sofern vorhanden, welcher automatisch Nullen nachschiebt. Aber ein einfacher Blick in den assemblierten Code hilft natürlich auch, ob man sich diese Gaudi sparen kann.
Gast
#503099
> Denn ich verlasse mich nicht darauf, dass der Compiler das Carry vorher > löscht oder einen Assemblerbefehl benutzt, sofern vorhanden, welcher > automatisch Nullen nachschiebt. Es soll ja Compiler geben, denen die C-Norm vollkommen egal ist, aber bei einem halbwegs vernünftigen Compiler kannst du dich schon darauf verlassen, daß er solch triviale Dinge korrekt umsetzt. Wenn nicht, würde ich ihn wegwerfen und durch einen besseren ersetzen. C-Rahul wrote: > darum habe ich auch geschrieben "ganz manchmal". > Denn ich verlasse mich nicht darauf, dass der Compiler das Carry vorher > löscht oder einen Assemblerbefehl benutzt, sofern vorhanden, welcher > automatisch Nullen nachschiebt. Das steht in der Definition des <<-Operators. Wenn du deinem C-Compiler die korrekte Umsetzung eines so einfachen Operators nicht zutraust, dann ist wohl ein Wechsel eine gute Idee. Antwort schreiben |
Anzeige
|