Forum: Mikrocontroller und Digitale Elektronik C Verständnisproblem: Bedingungen mit Logik Operatoren


von Max B. (tyrann619)


Lesenswert?

Hallo, ich habe ein Problem. Ich versuche gerade einen Quellcode eines 
fremden Projektes nachzuvollziehen.
Das klappt auch ganz gut nur bei der Schleife habe ich ein Problem.

while(!(PINC&(1<<2)))

Nach dem Was ich bisher zu wissen glaube, wenn die Eingabe an PINC zb. 
so aussieht:  00000100
Und (1<<2) so: 00000100

Das jetzt als UND verknüpft: 00000100

while(!(00000100)) und eine while-schleife wiederholt sich solange, 
solange der Ausdruck in den Klammern wahr(true) ist.
Ist jetzt 00000100 true?

von (prx) A. K. (prx)


Lesenswert?

Ja. Ein C Buch wäre nützlich.

von troll (Gast)


Lesenswert?

Max B. schrieb:
> Ist jetzt 00000100 true?

0b00000100 ist ungleich 0 und somit wahr. Alles was ungleich 0 ist ist 
wahr. Aber beachte den '!'-Operator, das ist ein logisches Nicht.

von Dennis S. (eltio)


Lesenswert?

True ist alles was nicht 0 ist..

von Dominik S. (dasd)


Lesenswert?

falsch = 0
wahr = alles ungleich null

von Fabian O. (xfr)


Lesenswert?

Max B. schrieb:
> Nach dem Was ich bisher zu wissen glaube, wenn die Eingabe an PINC zb.
> so aussieht:  00000100
> Und (1<<2) so: 00000100
>
> Das jetzt als UND verknüpft: 00000100

Richtig.

Max B. schrieb:
> while(!(00000100)) und eine while-schleife wiederholt sich solange,
> solange der Ausdruck in den Klammern wahr(true) ist.

while(x) läuft so lange, wie x wahr ist. In C ist der Wert 0 falsch und 
alle anderen Werte wahr. Das Aufrufezeichen negiert den Wert (aus wahr 
wird falsch, aus falsch wird wahr).

00000100 ist wahr, denn es ist nicht 0.
!(00000100) ist falsch, denn 00000100 ist wahr.

Die Schleife while(!(00000100)) läuft also nicht.

von Max B. (tyrann619)


Lesenswert?

Vielen Dank für die Antworten. Also ist 00000000 die einzige Möglichkeit 
wo false rauskommt?

von (prx) A. K. (prx)


Lesenswert?

Heisst du mit zweitem Vornamen zufällig (der ungläubige) Thomas? Oder 
weshalb reichen 4 diesbezügliche Antworten immer noch nicht aus?

Der Hinweis auf das C Buch war übrigens ernst gemeint. Sowas hilft.

von pst (Gast)


Lesenswert?

Gute Entwickler schreiben einfach if( blah != 0) statt if( !blah) - aber 
unter C-Hackern gilt das als uncool.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

pst schrieb:
> Gute Entwickler schreiben einfach if( blah != 0) statt if( !blah) - aber
> unter C-Hackern gilt das als uncool.

Na das kannst Du besser :-)))

von pst (Gast)


Lesenswert?

Hmja, fiel mir auch gerade ein.

von Fabian O. (xfr)


Lesenswert?

pst schrieb:
> Gute Entwickler schreiben einfach if( blah != 0) statt if( !blah) - aber
> unter C-Hackern gilt das als uncool.

Hauptsache man schreibt nicht if (blah == true), denn das könnte nicht 
den erwünschten Effekt haben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.