Liebe Netzbewohner Gibt es in C einen Befehl der dem Assembler-Befehl ROL oder ROR enspricht ? Gruss Duri
In gewisser Weise >> und <<, aber auch *2 und /2. Beachte die Anweisungen a*=2; oder a>>=1; oder a/=2; Allerdings wird hier das Carry ignoriert, das musst Du extra (mit eigener Variable) behandeln, wenn Du es brauchst. oder asm(ror); Was möchtest Du denn genau machen?
Hallo Profi Aber ich will rotieren (carryübertrag auf Bit 0) mit einem C-Befehl. Ich will z.B. einen Lauflicht am Port B machen. PORTB<<=1; if (bit_is_set(SREG,0)) PORTB|= (1<<PB0); Da sollte es einen Befehl in C geben der analog zu ROL funktioniert. Gibt es das ? Gruss Duri
Vieleicht so?
1 | uint8_t i; |
2 | i = 0x01; |
3 | while(1) { |
4 | PORTB = i; |
5 | i <<= 1; |
6 | if(!i) i = 0x01; |
7 | }
|
CU Frank
Hi
1 | //ROR
|
2 | PORTB = (PORTB<<1) | (PORTB>>7); |
3 | |
4 | //ROL
|
5 | PORTB = (PORTB>>1) | (PORTB<<7); |
Matthias
Geniale Lösungen sind immer einfach :) Cool! Musste ich doch mal loswerden, hab genau sowas gesucht!
> Aber ich will rotieren (carryübertrag auf Bit 0) mit einem C-Befehl. Das geht nicht, da es in C Flags gar nicht gibt. > Da sollte es einen Befehl in C geben der analog zu ROL funktioniert. Du kannst auch inline-Assembler verwenden. > //ROR > PORTB = (PORTB<<1) | (PORTB>>7); Etwas besser wäre dann noch: uint8_t portb = PORTB; PORTB = (portb<<1) | (portb>>7);
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.