PIC C << Schiebeoperator soll "1" statt "0" nachschieben

OP #1043456
Lesenswert?
• ▲
▼
Hallo zusammen,

ein wirklich sehr tolles Forum hier.

Leider hab ich für mein Problem keine Lösung gefunden,
deshalb Frage ich mal.


Ich programmiere ein 18F2550 in C, und habe folgendes Problem:

Ich möchte mit dem Schiebeoperator  << oder >> "1"en statt "0"en 
nachschieben.

Oder eine "Rotierfunktion" für meine binären Werte,
wäre auch toll.

Das ganze soll in C passieren!


Danke und Gruß
Chris
#1043468
Lesenswert?
• ▲
▼
Hi,
ne billig Varainte wäre sowas hier:

unsigned char rotateLeft(unsigned char x , unsigned char *byte)
{
   while(x > 0)
   {
     *byte = (*byte << 1) + 0x01;
      x--;
   }
   return *byte;
}


unsigned char rotateRight(unsigned char x , unsigned char *byte)
{
   while(x > 0)
   {
     *byte = (*byte >> 1) + 0x80;
      x--;
   }
   return *byte;
}

Gruß
Gast #1043602
Lesenswert?
• ▲
▼
Welchen C-Compiler verwendest Du denn?
Der von CCS hat für diesen Zweck die eingebauten Funktionen "shift_left" 
und "rotate_left". Die "_right"-Variante gibt es auch jeweils.

Hat natürlich den Nachteil, daß es nicht kompatibel ist.
#1043629
Lesenswert?
• ▲
▼
Rotieren funktioniert am einfachsten mit Hilfe des Inline Assemblers, da 
in Assembler das Schieben bei den PIC's sowieso mit Rotationsbefehlen 
realisiert wird.

Ansonsten mit dem Rechtsschieben von Signed-Variablen aufpassen, an 
dieser Stelle ist der C18 nicht ganz ANSI-konform! Normalerweise werden 
beim Rechtsschieben vorzeichenrichtig Nullen oder Einsen in die Variable 
geschoben, der C18 schiebt grundsätzlich Nullen auch in die 
Signed-Variablen.

Tschau Sven!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.