Discussion:
Stilfrage: Logisches xor
(zu alt für eine Antwort)
Thomas Koenig
2016-10-22 09:02:46 UTC
Permalink
Raw Message
C kein logisches xor, sondern nur ein bitweises. && und ||
existieren, aber leider kein äquivalentes ^^.

Daher habe ich gelegentlich schon Code geschrieben wie

if ((p1 == NULL) ^ (p2 == NULL))
return;

allerdings mit einem Kommentar drüber, warum. Finde ich nicht
schön, aber immer noch sauberer als

if ((p1 == NULL) + (p2 == NULL) == 1)
return;

Wie drückt ihr in eurem Code ein logisches xor aus?
Claus Reibenstein
2016-10-22 11:22:26 UTC
Permalink
Raw Message
Post by Thomas Koenig
C kein logisches xor, sondern nur ein bitweises.
Dieser Satz kein Verb ;-)
Post by Thomas Koenig
Daher habe ich gelegentlich schon Code geschrieben wie
if ((p1 == NULL) ^ (p2 == NULL))
Kann man machen. Funktioniert auch garantiert.
Post by Thomas Koenig
Wie drückt ihr in eurem Code ein logisches xor aus?
Um bei Deinem Beispiel zu bleiben:

if ((p1 == NULL) != (p2 == NULL)) ...

Oder in diesem Fall noch kürzer:

if (!p1 != !p2) ...

Gruß
Claus
Helmut Schellong
2016-10-22 14:12:00 UTC
Permalink
Raw Message
Post by Thomas Koenig
C kein logisches xor, sondern nur ein bitweises. && und ||
existieren, aber leider kein äquivalentes ^^.
Wie drückt ihr in eurem Code ein logisches xor aus?
Die Lösung wurde bereits gepostet.
(^^ ist in bsh eingebaut.)

a ^= 1;

toggelt von 0 --> 1 --> 0 --> 1 ... hin und her.
--
Mit freundlichen Grüßen
Helmut Schellong ***@schellong.biz
www.schellong.de www.schellong.com www.schellong.biz
http://www.schellong.de/c.htm
Stefan Reuther
2016-10-23 07:10:09 UTC
Permalink
Raw Message
Post by Thomas Koenig
C kein logisches xor, sondern nur ein bitweises. && und ||
existieren, aber leider kein äquivalentes ^^.
Daher habe ich gelegentlich schon Code geschrieben wie
if ((p1 == NULL) ^ (p2 == NULL))
return;
allerdings mit einem Kommentar drüber, warum. Finde ich nicht
schön, aber immer noch sauberer als
if ((p1 == NULL) + (p2 == NULL) == 1)
return;
Wie drückt ihr in eurem Code ein logisches xor aus?
Meistens mit '^' oder '!=', je nach Laune.

Manchmal ist es auch sinnvoll, die Zweige separat aufzuschreiben,
insbesondere, wenn die Bedingungen weitergehen oder man im Kommentar
noch was zu den Zweigen zu sagen hat.

if (p1 == NULL) {
if (p2 != NULL && blub) { ... }
} else {
if (p2 == NULL && blah) { ... }
}


Stefan

Loading...