Habt ihr schon mal versucht nach "|=" zu googeln. Es gibt keine Suchergebnisse zu diesem Operator. Hätte gern mal gewusst, was das denn bedeutet in C. Ist das eine Zuweisung oder eher das gleiche "(= x|y)"?
Gast
#865262
Das ist ein Vergleichsoperator und bedeutet "ungleich" also das Gegenteil von "==". Steht allerdings in garantiert jedem C-Tutorial für Einsteiger ;)
Gast
#865263
A = A | B ist identisch mit A |= B
Gast
#865264
ungleich wäre != und nicht |=
Gast
#865265
| = bitweises oder Ich denke mal wie "+=" wird das funktionieren :)
Also ein "OR" oder heisst das das dem RegisterA eine Bit B zugewiesen wird?
Gast
#865267
Hallo Lukas, x |= y; ist das gleiche wie x = x | y; also eine bitweise ODER-Verknüpfung mit anschließender Zuweisung. Bitte nicht mit "!=" (ungleich) verwechseln! Gruß Jens
Nein, das heisst, dass in der Zielvariablen die Bits gesetzt werden, die im linken, rechten oder in beiden Operatoren gesetzt sind. Wahrheitstabelle von OR: A | B = Y 0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1 Achja: Bei der Verwendung von Flags tut's oft auch eine Addition, ich empfehle allerdings dringendst, OR zu verwenden, wenn es um bitweise Operationen geht. Ist nämlich ein Bit bereits gesetzt, werden die oberen Bits auch verändert (Eine bitweise Addition entspricht einem logischen XOR, 1 + 1 = 0).
das or kenn ich ja aber wieso schreibt man dann ADSCRA |= (1<<ADSC); anstatt ADSCRA = (1<<ADSC); ?
Gast
#865283
Mit erstem setzt du das Bit das mit der Maske (1<<ADSC) angegeben ist in der Variablen ADSCRA. Und nur dieses eine Bit. Alle anderen bleiben unverändert. Beim zweiten wird die Maske der Variablen zugeweisen. Die Variable ADSCRA enthält nun die Maske. Ein Bit ist gesetzt, die anderen gelöscht. Egal, was vorher in ADSCRA stand. Sebastian
Super Antwort. Jetzt hab ichs verstanden. Danke.
Gast
#865288
Ups ja hab tatsächlich das "|" als "!" gelesen, sorry.
> ADSCRA |= (1<<ADSC); Das Bit ADSC wird in ADSCRA gesetzt, Rest bleibt unverändert > ADSCRA = (1<<ADSC); NUR das ADSC-Bit ist gesetzt, alle anderen Bits sind 0 Das Gegenteil wäre übrigens: ADSCRA &= ~(1<<ADSC); Das ADSC-Bit wird gelöst, oder anders ausgedrückt, alle Bits, bis auf das ADSC "überleben" Gruß Roland
C-Programmmierer sind von Hause aus faul. Das sind verkürzte Schreibweisen. Geht mit allen Operatoren: x=x+1; --> x+=1; x=x-1; --> x-=1; x=x*5; --> x*=5; x=x|5; --> x|=5; Hier werden zwei sachen gemacht. ODER fügt immer Bits hinzu, und UND löscht Bits. Daher muss man zum Löschen eines Bits ein wenig tricksen. Man verundet mit dem Inversen (NOT, ~) von dem Bit, welches man löschen möchte: ADSCRA = ADSCRA & (~ (1<<ADSC)); ADSCRA &= ~(1<<ADSC); VG, /r.
Gast
#865707
Ich glaub ich bleib dann doch bei Assembler ;-) Sven
Gast
#865738
soo groß ist der unterschied zwischen |= und or(i) gar nicht ;-) C:
1 | |
entspricht im großen und ganzen folgendem code: ASM:
1 | |
2 | |
3 | |
Besser du beschäftigst dich einmal richtig mit der Boolschen Algebra. AND und OR bilden wenn ich mich richtig erinnere einen Körper, das heist es gelten folgende Eigenschaften (die gelten in jedem Fall, bin mir nur grad nicht scher ob's damit ein Körper ist): (A OR B) OR C == A OR (B OR C) (Assoziativ, selbes für AND), A OR B == B OR A (Kommutativität, selbes für AND), A AND 1 == A, und A OR 0 == A (Neutralelement), A AND NOT(A) == 0 und A OR NOT(A) == 1 (Inverses), und schließlich (A OR B) AND C == (A OR C) AND (B OR C) Distributivität, wobei man die Klammern weglassen kann, AND hat die höhere Priorität. Daher schreibt man AND oft als * (mal) und OR als +. Also (A+B)C == AC + BC. Brauchbar ist dann noch DeMorgan. Je nachdem was man machen möchte auch DNF, KNF, KV Diag. usw.
Da werden sie geholfen.. http://www.schellong.de/c.htm#oper
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.