Nicht? Wenn du gleich den ersten Treffer (wikibooks) anklickst, welche Fragen bleiben dann bezüglich "<<" noch offen?"C << operator" bei Google hilft nicht weiter!
Hi,
hab (schon wieder) eine Frage: Wo finde ich im Internet etwas über den Operator ' << ' ?
"C << operator" bei Google hilft nicht weiter!
Roboter, CNC Fräse, Elektronik und Basteleien stelle ich auf meiner Website vor...
Nicht? Wenn du gleich den ersten Treffer (wikibooks) anklickst, welche Fragen bleiben dann bezüglich "<<" noch offen?"C << operator" bei Google hilft nicht weiter!
MfG
Stefan
Hei Jacob2,
Schau mal hier:
https://www.roboternetz.de/wissen/in...der_Operatoren
oder hier
http://www.mikrocontroller.net/artic...gisterinhalten
wobei die Bitmanipulation explizit noch hier
http://www.mikrocontroller.net/articles/Bitmanipulation
hübsch beschrieben wird. Es ist eigentlich eine häufige Operation, aber man kann die - wenn man es kann - ziemlich tricky anwenden.
Ciao sagt der JoeamBerg
<< und >> sind shift-Operatoren.
Damit verschiebt man die Daten um eine bestimmte Anzahl Bits nach links oder rechts.
Beispiele:
unsigned char bla = 0xcb; //11001011
(bla << 1) ergibt: 0x0196 //00000001 10010110 (unsigned short!!!, ggf type-casten, um wieder unsigned char zu bekommen)
(bla << 3) ergibt: 0x0658 //00000110 01011000 (unsigned short!!!, ggf type-casten, um wieder unsigned char zu bekommen)
(bla >> 1) ergibt: 0x65 //01100101
(bla >> 4) ergibt: 0x0c //00001100
EDIT: Dies wird häufig benutzt, um bestimmte Bits in einem Register zu setzen/löschen:
einRegister |= (1 << EIN_BIT) | (1 << ANDERES_BIT);
setzt die Bits, die durch EIN_BIT und ANDERES_BIT gekennzeichnet sind (die entsprechende Bit-Nummer)
Außerdem wäre noch zu erwähnen, daß man << und >> hervorragend zur Multiplikation mit, bzw. Division durch Potenzen von 2 nutzen kann...
a << 2 liefert z.B. das gleiche Ergebnis wie a*4
a >> 1 ist dementsprechend gleichbedeutend mit a/2
Das sollte man wissen, da man auf diese Art z.B. schnelle Divisionen realisieren kann, auch wenn der verwendete µC eigentlich nicht dividieren kann (z.B. AVR).
Will man << für Multiplikationen nutzen, sollte man beachten ob der verwendete µC einen Barrel-Shifter hat. Bei den AVR Controllern ist das z.B. nicht der Fall und eine Multiplikation benötigt zudem nur 2 Zyklen, so daß ein Shift nur bei der Multiplikation mit 2 schneller ist.
So viele Treppen und so wenig Zeit!
Kleiner Zusatz:
Nicht alle AVRs haben einen Hardware-Multiplizierer.und eine Multiplikation benötigt zudem nur 2 Zyklen, so daß ein Shift nur bei der Multiplikation mit 2 schneller ist.
MfG
Stefan
Nach (m)einer Liste mit 84 AVR´s haben die mega´s alle einen und die tiny´s keinen Hardware-Multiplizierer. In dieser Liste sind das 52 Controller von ATmega8 bis ATmega2561. Im Zweifelsfall wird man natürlich bei ATMEL direkt nachlesen.Zitat von sternst
Ciao sagt der JoeamBerg
Ich bin mir nicht ganz sicher, was du mir damit jetzt sagen willst.
Sind die Tinys in deinen Augen keine AVRs?
MfG
Stefan
Ich habe ganz Allgemein, vorzugsweise aber an den Ersteller des Threads Deine Aussage etwas ausführlicher dargestellt und als Hilfe für den Threadersteller noch einen hier sinnvollen Link gegeben. Deinen zweiten Satz brauchen wir hoffentlich nicht zu diskutieren.
Ciao sagt der JoeamBerg
Tip: such nach Bit Operatoren in C bzw C++ - kommt aufs gleiche bei raus - gibt da noch mehr wie |, ||, &, &&, ^, <<, >>
Lesezeichen