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
Gast
#1043466
Nach dem >> 0x7F und nach << 0xFE draufUNDen.
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
#1043469
oh, falschrum... 0x01 bzw. 0x80 draufODERn.
Danke euch beiden, ich teste es Morgen mal.
Gast
#1043499
...oder erst negieren '~' , dann schieben, Ergebnis wieder negieren...
Gast
#1043602
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.
Gast
#1043618
Ich benutze den Mplab C18 von Microchip. Gibt's da auch eine fertige Funktion zum rotieren?
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!
Gast
#1043750
x um n Bits nach links schieben mit nachgeschobenen 1en geht bspw. so:
1 | |
Oh ja, manchmal ists doch so einfach, aber man kommt nicht drauf! Ich danke euch allen, werde eure Möglichkeiten mal ausprobieren. Gruß Jetronic
Gast
#1045345
>> x um n Bits nach links schieben mit nachgeschobenen 1en geht bspw. so:1 | |
Gibt's 'nen ähnlich eleganten Trick auch für's rechtsschieben?
Also das kannst du so machen: x = (x >> 1) + 0x80 Gruß Jetronic
Gast
#1045380
...ähm, schon klar,
1 | |
und wenn ich mehr als einmal schieben will?
1 | |
2 | |
3 | |
ja bei n=2, müsste das so gehen: x = (x >> 2) + 0xC0 // binär 1100 0000 n=3: x = (x >> 3) + 0xF0 // binär 1110 0000
Gast
#1045436
n sollte variabel bleiben. Mehr als das fällt mir dazu auch nicht ein.
1 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.