www.mikrocontroller.net

Forum: GCC Frage zu Schiebeoperation <<

Autor: Patrick (Gast)
Datum: 01.07.2008 08:51

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: 01.07.2008 09:12

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: 01.07.2008 09:15

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: 01.07.2008 09:20

ups, joa da hascht recht... Ich sollte so früh am morgen nicht versuchen
denken ;)
Autor: Patrick (Gast)
Datum: 01.07.2008 10:10

Ach so!! Jetzt hab ichs kappiert. Danke für Eure Antworten!!

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net