Forum: PC-Programmierung Bedeutung von " |= "


von Rabauke (Gast)


Lesenswert?

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
von Selbi (Gast)


Lesenswert?

Vielleicht mal selber ein C-Buch lesen?

von Rabauke (Gast)


Lesenswert?

Selbi schrieb:
> Vielleicht mal selber ein C-Buch lesen?

Steht leider nicht in meinem C-Buch drin.(C Programmieren von Anfang an)

von Lukas P. (lks)


Lesenswert?

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ß

von (prx) A. K. (prx)


Lesenswert?

Vielleicht steht ja nur die Ersatzsequenz ??!= drin.

von Rabauke (Gast)


Lesenswert?

Ja, ich meine " |= ". " == " und " != " sind mir bekannt. Trotzdem 
danke.

von Matthias H. (hallamen)


Lesenswert?


von Rene H. (Gast)


Lesenswert?

Bitweises Oder und Zuweisung.

a = a | b

ist

a |= b

Grüsse,
René

von Udo S. (urschmitt)


Lesenswert?

Variable Operator= Wert
ist das gleiche wie
Variable = Variable Operator Wert

Steht GARANTIERT in deinem C Buch.

von Dirk B. (dirkb2)


Lesenswert?

Weißt du was += oder -= oder *= bedeutet?
Weißt du was der Operator | bedeutet?

von Rabauke (Gast)


Lesenswert?

Danke für die Erklärungen!

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Lukas P. (lks)


Lesenswert?

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ß

von Freddy (Gast)


Lesenswert?

|= 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.

von Rabauke (Gast)


Lesenswert?

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

von Rene H. (Gast)


Lesenswert?

Richtig.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Das sind Kurzschreibweisen, genau wie +=, -=, *=, /=, ^=, |=, &=

: Bearbeitet durch User
von Udo S. (urschmitt)


Lesenswert?

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
von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Paul Baumann (Gast)


Lesenswert?

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

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

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!

von qwerzuiopü+ (Gast)


Lesenswert?

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.

von Bernd B. (Gast)


Lesenswert?

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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.