www.mikrocontroller.net

Forum: Compiler & IDEs Frage zu Schiebeoperation <<


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen

Wahrscheinlich hat diese Frage der Eine oder Ander schon mal hier 
gestellt, aber ich möchte sie doch noch einmal stellen. Mit dieser 
Operation:
1<<3;
schiebe ich eine 1 um 3 Stellen nach links. D.h. aus 0000 wird 0100.
Kann ich jetzt um eine Null zu schieben
0<<3;
schreiben? Gibt das dann aus z.B. 1111 --> 1011?

Danke für Eure Antworten.

Und bitte kein Verweis auf Bitmanipulation.

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht ganz.

mit
 1<<3 
schiebst du eine 1 3 Stellen nach links. Eine 1 sieht vor dem Schieben 
allerdings so aus:  0001
daraus wird also 1000

mit
 0<<3 
schiebst du eine 0 um 3 Stellen nach links. Nun sieht eine 0 aber so 
aus: 0000
wenn du das 3 Stellen verschiebst bleibt es immer noch 0000.

Was du meinst lässt sich so erreichen:
 0b11111110 << 3 
Du gehst diesmal also von einer Zahl aus, die bereits eine 0 an letzer 
Stelle hat. Wenn du diese Zahl 3 Stellen nach links verschiebst bekommst 
du 11110111

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Olli wrote:

>
 0b11111110 << 3 
> Du gehst diesmal also von einer Zahl aus, die bereits eine 0 an letzer
> Stelle hat. Wenn du diese Zahl 3 Stellen nach links verschiebst bekommst
> du 11110111

Nein, es wird 11110000 draus.  Auf der rechten Seite werden immer nur
Nullen nachgeschoben, eine Linksverschiebung einer vorzeichenlosen
Zahl entspricht exakt einer Multiplikation mit 2.

Bitmanipulation ist schon das richtige Stichwort, denn das ist die
einzige Möglichkeit, sowas zu erreichen:
~(1 << 3)

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups, joa da hascht recht... Ich sollte so früh am morgen nicht versuchen 
denken ;)

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so!! Jetzt hab ichs kappiert. Danke für Eure Antworten!!

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.