Hallo, ich möchte in einem Kreis/Ring schieben, d.h. wie mit dem >> Operator nur dass das herausgeschobene Bit auf der anderen Seite wieder reingeschoben wird. Prozessor ist ein Atmel wenn das von Bedeutung ist. Gibts da eine schnelle Lösung / Befehl? Oder muss man das Bit abfragen dann schieben und per Hand wieder einfügen z.B. so if (0x80 & variable) ((variable << 1) + 1); else (variable << 1); (nicht ausprobiert ... aber so in der Art) Danke
sorry Programmiersprache ist C, mit Assembler würde es ja einen Befehl gehen. Viell. mit dem einem Inlineassemblerbefehlt, aber dann wüsste nicht wie ich auf meine Variable names variable zugreifen müssen.
http://de.wikipedia.org/wiki/Bitweiser_Operator#C.2C_C.2B.2B_und_Java ich bin mir nicht 100% sicher, glaube aber dass dies in Standard c nicht implementiert ist. ev. Suchbegriff: arithmetic shift MFG codehamster
haha schrieb: > ich möchte in einem Kreis/Ring schieben, d.h. wie mit dem >> Operator > nur dass das herausgeschobene Bit auf der anderen Seite wieder > reingeschoben wird. Prozessor ist ein Atmel wenn das von Bedeutung ist. Da es von Atmel viele verschiedene Architekturen gibt, ist der Hersteller alleine nicht von Bedeutung. > Gibts da eine schnelle Lösung / Befehl? In C gibt es da nichts einfaches. Entweder mußt du inline assembler nutzen, oder es eben so machen: > Oder muss man das Bit abfragen dann schieben und per Hand wieder > einfügen
Oh Mann, einen Post obendrüber steht doch, wie es einfach in C gehen kann.
Ghost schrieb: > Oh Mann, einen Post obendrüber steht doch, wie es einfach in C gehen > kann. Das ist aber auch nix anderes als Rolf Magnus schrieb: >> das Bit abfragen dann schieben und per Hand wieder einfügen nur daß halt ein Oder statt einer Abfrage benutzt wird. Übrigens macht gcc bei mir aus keinem der beiden einen rotations-Befehl.
Rolf Magnus schrieb: > nur daß halt ein Oder statt einer Abfrage benutzt wird. Übrigens macht > gcc bei mir aus keinem der beiden einen rotations-Befehl. So gehts, mit gcc 4.1 für x86 (ebenso 4.2 für Power):
1 | unsigned rot(unsigned x) |
2 | {
|
3 | return x << 1 | x >> 31; |
4 | }
|
1 | rot: |
2 | movl 4(%esp), %eax |
3 | rorl $31, %eax |
4 | ret |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.