Hallo. Wie schon im Betreff steht suche ich nach der Bedeutung von " |= ". Diese Kombi sehe ich oft in C Programmen bzgl. der µC Programmierung. Welche Bedeutung hat diese Kombi und wie kann man sie verstehen? MfG
:
Gesperrt durch Moderator
Selbi schrieb:
> Vielleicht mal selber ein C-Buch lesen?
Steht leider nicht in meinem C-Buch drin.(C Programmieren von Anfang an)
Sicher, dass du "|=" meinst und nicht "!="? Bei "!=" ist ungleich gemeint, also das Gegenteil von "==". Du solltest ggf. tatsälich in ein C Buch schauen, wenn es hier Probleme gibt. Gruß
Bitwise OR assignment http://en.wikipedia.org/wiki/Operators_in_C_and_C++#Compound_assignment_operators
Variable Operator= Wert ist das gleiche wie Variable = Variable Operator Wert Steht GARANTIERT in deinem C Buch.
Weißt du was += oder -= oder *= bedeutet? Weißt du was der Operator | bedeutet?
Rabauke schrieb: > Steht leider nicht in meinem C-Buch drin.(C Programmieren von Anfang an) Das kann ich mir nicht vorstellen. Schau noch einmal genau nach. Wenn das tatsächlich fehlt, dann schmeiß das Buch weg und kauf dir ein anderes, bspw. das von Kernighan und Ritchie.
Matthias H. schrieb: > Bitwise OR assignment > > http://en.wikipedia.org/wiki/Operators_in_C_and_C++#Compound_assignment_operators Stimmt. Sorry, gerade nicht ans OR gedacht. Gruß
|= bedeutet oder gleich Damit werden Bits in irgendwelchen Registern gesetzt um z.B. einen ADC des µCs zu aktivieren adc_en_reg = 0x0001; // ADC 1 ist aktiviert adc_en_reg |= 0x0002; // ADC 2 wird auch aktiviert -> jetzt steht im Reg 0x0003 drin, da alle Bits geodert wurden.
Also kann ich das so verstehen: Der linke und rechte Wert von " |= " wird verknüpft und wird dann wieder in die Variable geschrieben wie im folgenden Beispiel? Bsp.: 011010010 010110001 011110011
Das sind Kurzschreibweisen, genau wie +=, -=, *=, /=, ^=, |=, &=
:
Bearbeitet durch User
Random ... schrieb: > Das sind Kurzschreibweisen Und kamen noch daher als man noch keine interaktive IDE mit Autovervollständigung hatte sondern noch Lochkarten stanzen musste. :-) Da war man für jedes gesparte Zeichen froh!
:
Bearbeitet durch User
Udo Schmitt schrieb: > Und kamen noch daher als man noch keine interaktive IDE mit > Autovervollständigung hatte sondern noch Lochkarten stanzen musste. Es ist auch im Zeitalter von interaktiven IDEs sinnvoll, da man statt
1 | arrayname[indexname + offsetname] = arrayname[indexname + offsetname] + 2; |
einfach
1 | arrayname[indexname + offsetname] += 2; |
schreiben kann, was deutlich besser lesbar ist.
Interessant: In den Anfangszeiten, als C noch hauptsächlich in den Bell Labs gesprochen wurde und sonst praktisch nirgends, sah die Operation anders aus. Anstelle von
1 | a op= b; |
schrieb man
1 | a =op b; |
Ritchie fand das ursprünglich schöner, da das = auf der Seite stand, auf der zugewiesen wurde (also beim a), während die Operation auf der Seite stand, an der das Argument für die Operation angegeben wurde. Man schrieb also
1 | a =+ 5; |
oder
1 | var =* 8; |
aber damit gab es ein 'Problem'. Es gab einen Bedeutungs-Unterschied zwischen
1 | a =- 2; |
und
1 | a = -2; |
und dieser Bedeutungs-Unterschied wurde lediglich durch die Position des Leerzeichens hervorgerufen. Es war nicht missverständlich, denn in den C-Regeln war auch ganz klar definiert, wie das zu lesen ist, die Regeln regelten auch ganz klar, wie
1 | var=-2; |
zu interpretieren ist. Aber in der Praxis erwies sich das als zu fehleranfällig, so dass die Kurzschreibweise umgedreht wurde und aus =op die auch heute noch benutzte Form op= wurde. Ein ähnliches syntaktisches "Problem" existiert auch heute noch.
1 | b+ +2 |
und
1 | b++2 |
sind 2 verschiedene 'Dinge' (ok das eine ist ein Syntax Error). Jedoch ist dieses Problem weitaus weniger problematisch als die Sache mit den =op Operationen.
:
Bearbeitet durch User
Was geht schneller -einen (logischen) Fehler in einem Quelltext, der einer Art von maschinellem Steno entspricht zu finden, oder eine Programmiersprache zu benutzen, die solche Fehler gar nicht zuläßt? MfG Paul
Paul Baumann schrieb: > Was geht schneller -einen (logischen) Fehler in einem Quelltext, der > einer Art von maschinellem Steno entspricht zu finden, oder eine > Programmiersprache zu benutzen, die solche Fehler gar nicht zuläßt? Nach der Programmiersprache, die keine logischen Fehler zulässt, sucht man deutlich länger (wenn nicht sogar ewig) als nach dem Fehler in einem Stenosprachenprogramm ;-) Und die wenigen Sprachen, die dem hehren Ziel, logische Fehler schon beim Kompilieren aufzudecken, zumindest schon etwas näher gekommen sind, gelten als Exoten und werden von den meisten nicht gemocht.
An sich steht hier eine einfache Frage zum Thema C-Code. Das Forum wäre wirklich doppelt so hilfreich, wenn man als Kommentar einfach nur die Frage beantwortet und die beleidigenden Kommentare - die nichts mit der Frage zu tun haben, wie "ein Buch lesen", etc. - sein lässt!
Karl H. schrieb: > oder var =* 8; Das dürfte wohl noch viel essentieller als das Beispiel mit dem Minus sein. Denn wenn man die Konstante durch eine Variable ersetzt, steht da eine Dereferenzierung statt einer Multiplikation.
Mal abgesehen davon, dass Du die Uhr gestern wohl aus Versehen nicht eine Stunde vor, sondern fünf Jahre zurück gestellt hast, finde ich es interessant, dass Du den Rat, ein gutes Buch zu lesen, als Beleidigung empfindest.
Martin schrieb: > Das Forum wäre wirklich doppelt so hilfreich, Das Forum wäre doppelt so hilfreich, wenn man nicht immer solche uralten Leichen (hier 5 Jahre) aus der Gruft holt. Damit sperre ich den Thread.