www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verhalten von Schiebeoperator


Autor: Thiel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Durch diesen befehl wird ja das untere Nibble nach oben geschoben.

Nein. Nach 'unten'.

MfG Spess

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thiel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm einfach unsigned char oder noch besser uint8_t, dann ist das 
eindeutig.

MfG
Falk

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwei Dumme, ein Gedanke.

Aber ich war dümmer, ähhh, schneller. ;-)

Autor: Thiel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 
:-)

Autor: Jo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Definiere dir doch ein Datentyp selbst und benenne ihn möglichst kurz.
Ich hab schon einige "uchar" gesehen.
Jo

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.