-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogisches_xor.md
More file actions
35 lines (25 loc) · 1.12 KB
/
Copy pathlogisches_xor.md
File metadata and controls
35 lines (25 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
title: Wieso gibt es kein logisches XOR in C?
date: 2016-02-15
In C gibt es vier bitweise Operatoren:
* *UND* Operator - `&`
* *ODER* Operator - `|`
* *Exklusiv ODER* Operator - `^`
* *INVERTIERUNG* - `~`
Neben den bitweisen Operatoren gibt es noch die logischen Verknüpfungen, die den bitweisen entsprechen:
* *UND* Verknüpfung - `&&`
* *ODER* Verknüpfung - `||`
* *INVERTIERUNG* - `!`
Hier fehlt offensichtlich die Exklusive *ODER* Verknüpfung - wieso gibt es kein `^^`?
Mögliche Gründe sind:
* Eine logische *Exklusiv ODER* Verknüpfung ist sehr selten.
* Die Kurzschlussauswertung wird nicht ermöglicht - Ist bei einer *UND* Verknüpfung der erste Term falsch muss der zweite nicht
mehr überprüft werden. Das gleiche gilt bei *ODER* mit dem ersten Term wahr. Bei *Exklusiv ODER* geht dies nicht.
## Und wenn ich es doch mal benötige?
Eine logische *Exklusiv ODER* Verknüpfung lässt sich wie folgt realisieren:
```c
if (!a != !b) {
...
}
```
Mittels logischer Invertierung `!` wird der entsprechende Term auf 0 (falsch) oder 1 (wahr) gebracht. Wenn diese logischen
Terme unterschiedlich sind ist die Gesamtaussage wahr.