Hallo! char temp = 0xF8 temp1 = temp1 >> 4; Durch diesen befehl wird ja das untere Nibble nach oben geschoben. Ich würde gerne wissen was genau bei der Schiebung passiert : -Wird einfach nurch nachgeschoben und mit Nullen aufgefüllt? Also temp1 = 0x0F -Oder gar mit Einsen? Also temp1 = 0xFF -Oder nach dem Karusselprinzip geschoben? Also temp1 = 0x8F Oder kommt das gar auf den Compiler an (ich arbeite mit AVR Studio)? Vielleicht kann mich ja schnell jemand aufklären, in der Suche bzw. im Tutorial Schiebeoperatoren konnte ich keine Antwort auf meine Frage finden (Verzeihung falls ich etwas übersehen habe)! MfG Thiel
Hi
>Durch diesen befehl wird ja das untere Nibble nach oben geschoben.
Nein. Nach 'unten'.
MfG Spess
Thiel schrieb: > Hallo! > > char temp = 0xF8 > > temp1 = temp1 >> 4; > > Durch diesen befehl wird ja das untere Nibble nach oben geschoben. Äh, nein. Das obere nach unten > Ich würde gerne wissen was genau bei der Schiebung passiert : Das ist so noch nicht genau festgelegt, da du char benutzt und für einen char nicht definiert ist, ob der ein Vorzeichen hat oder nicht. Hat er ein Vorzeichen, dann ist die ganze Operation abhängig davon, wie die Implementierung deines Compiler das realisiert. Ist ein char unsgined, dann werden von links 0 Bits reingeschoben. > -Wird einfach nurch nachgeschoben und mit Nullen aufgefüllt? > Also temp1 = 0x0F Im unsigne Fall: ja > -Oder gar mit Einsen? > Also temp1 = 0xFF Nein > -Oder nach dem Karusselprinzip geschoben? > Also temp1 = 0x8F Das wäre rotieren und nicht schieben
Ok danke für die schnelle Antwort. Ja das obere Nibble nach unten... verschrieben. Also deswegen immer sicherheitshalber maskieren, da wenn nicht unsigned das Verhalten allein vom Compiler abhängig ist ?
Nimm einfach unsigned char oder noch besser uint8_t, dann ist das eindeutig. MfG Falk
Thiel schrieb: > Ok danke für die schnelle Antwort. > > Ja das obere Nibble nach unten... verschrieben. > > Also deswegen immer sicherheitshalber maskieren, da wenn nicht unsigned > das Verhalten allein vom Compiler abhängig ist ? Ja. Oder aber besser: Warum nimmst du nicht gleich unsigned char anstelle von char?
Zwei Dumme, ein Gedanke. Aber ich war dümmer, ähhh, schneller. ;-)
Danke. Doppelt hält besser ;-) Werde ab nun an unsigned char verwenden bzw. uint8_t Diese Datentypen sind ja in der libc enthalten soweit ich weiß. Bisher habe ich diese jedoch nie verwendet, da die datentypen eben so "umständliche" namen haben und für meine kurzen programme eben einfach char oder int eben schneller waren und ich nichts extra einbinden musste :-)
Definiere dir doch ein Datentyp selbst und benenne ihn möglichst kurz. Ich hab schon einige "uchar" gesehen. Jo
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.