Gibt es im C eigentlich so Funktionen wie im Assembler(rol und ror)?
Gibt es im C eigentlich so Funktionen wie im Assembler(rol und ror)?
Immer schön cool bleiben und nie aufgeben.
Irgendwann klappts mal
Wie wäre es mit etwas inline Assembler ?
Beispiel:
Dreht mit hilfe von rol alle Bits in tmp um, also Bit 0 wird zu 7 1 zu 6 usw.Code:asm volatile ( "ldi %2,8" "\n\t" "0:" "\n\t" "lsr %0" "\n\t" "rol __tmp_reg__" "\n\t" "dec %2" "\n\t" "brne 0b" "\n\t" "mov %0,__tmp_reg__" "\n\t" : "=a" (tmp) : "0" (tmp), "a" (count) );
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Blick ich nicht
Immer schön cool bleiben und nie aufgeben.
Irgendwann klappts mal
wie waers mit
Je nachdem ob man nun ein char, int oder long rotieren will muss natuerlich die Funktion entsprechend abgeaendert werden.Code:unsigned char ror(unsigned char val, unsigned char places) { return (val>>places)|(val<<8-places); } unsigned char rol(unsigned char val, unsigned char places) { return (val<<places)|(val>>8-places); }
HTH
@fluchtpunkt,
Bist Du sicher, daß Deine Funktionen wirklich rol ror nachbilden ?
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
naja nicht ganz, eigentlich ueberhaupt nicht. Naechstes mal les ich vorher was ror und rol eigentlich tut, hatte das anders in Erinnerung :/
EDIT2: Aber eigentlich ist sowas wie rol und ror, exakt so nachgebildet wie in assembler ziemlich sinnlos.
Ja ebenAber eigentlich ist sowas wie rol und ror, exakt so nachgebildet wie in assembler ziemlich sinnlos.
und wenn überhaupt, dann irgendwie ein Stück von Inlineassembler...
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Ah, weil ich möcht n LED Lauflicht mache und ich bekomm des irgendwie net hin.
Immer schön cool bleiben und nie aufgeben.
Irgendwann klappts mal
Ja dann beschreib mal etwas Dein Lauflicht und warum unbedingt rol oder ror helfen soll
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
na wenn du ein lauflicht machen willst bei dem das was links rausfaellt rechts wieder reinkommt dann ist mein Code doch sehr gut geeignet.
man kann sowas natuerlich auch ohne Bitshiftmagie machen.
Code:unsigned char rotate_right(unsigned char pattern) { unsigned char add; if (pattern & 0x01) add = 0x80; else add = 0; pattern = pattern >> 1; pattern = pattern | add; return pattern; }
Je nachdem wie dein Lauflicht aussieht muss das aber nicht der optimale Weg sein, deswegen ist es immer sehr hilfreich wenn man genau dazu schreibt was man eigentlich machen moechte. Gerade Anfaenger verrennen sich oft in irgendwelche "abstrusen Vorstellungen"![]()
Lesezeichen