^ (Sonderzeichen)

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Adventskalender 2023 - 18.12.

Das Gravis-Akzentzeichen ^ taucht in den Programmierumgebungen an allen möglichen Ecken auf.

Beginnen wir mit Suchmustern (RegExp). Hier hat das ^ gleich zwei Bedeutungen! Zum einen ist es ein Anker (Zero-Width Assertion in geek speak), mit dem man ausdrücken kann, dass das Suchmuster am Anfang des durchsuchten Texts stehen soll (oder am Zeilenanfang, wenn die RegExp im Multiline-Modus verwendet wird). Die RegExp /^Hallo/ trifft zu, wenn der durchsuchte Text mit Hallo beginnt. Zum anderen wird es bei der Definition von Zeichenklassen (die eckigen Klammern) verwendet, um auszusagen: Alles außer diesen Zeichen. /[^a-z]+/ findet eine Folge von Zeichen, die nicht aus dem Bereich 'a' bis 'z' stammen.

Die Bedeutung „steht zu Beginn“ wurde auch nach CSS übertragen. Der Attributselektor [href^=http:] findet diejenigen Elemente, die href-Attribut besitzen, dessen URL mit http: beginnt (also die, die besser durch https: ersetzt werden sollten).

In Programmiersprachen wie JavaScript oder PHP hat das ^ hingegen die Bedeutung eines Bit-Operators mit der Bedeutung XOR (eXclusive OR). Die XOR-Operation zweiter Bits liefert den Wert 1, wenn eins der beiden verknüpften Bits den Wert 1 hat. Sind beide Bits 0 oder beide Bits 1, liefert die XOR-Operation den Wert 0. Man wendet den ^-Operator aber nicht nur auf ein Bit an, sondern auf zwei ganzzahlige Werte. Er verknüpft die Bits miteinander, die an der gleichen Bitposition stehen.

Beispiel: 123 hat den Binärwert 1111011, 97 hat den Binärwert 1100001.

Position 6 5 4 3 2 1 0
123= 1 1 1 1 0 1 1
97= 1 1 0 0 0 0 1
123^97= 0 0 1 1 0 1 0

Wenn Du die Tabelle spaltenweise anschaust, dann siehst Du, dass die Bits an der gleichen Bitposition miteinander XOR-verknüpft wurden. Zwei gleiche Bits ergeben 0, zwei unterschiedliche Bits ergeben 1.

Die XOR-Operation wird bei Verschlüsselungen verwendet, oder um bestimmte Bitpositionen gezielt zu invertieren (die Operation a XOR 1 liefert immer den Gegenwert zu a, aus 0 wird 1 und aus 1 wird 0).

Um zwei boolesche Werte (also die JavaScript-Werte true und false) miteinander durch XOR zu verknüpfen, ist der ^-Operator hingegen nicht geeignet, weil er eine Zahl als Ergebnis hat. Hinzu kommt, dass man in JavaScript oder auch PHP gerne mit "truthy" und "falsy" Werten arbeitet (Was ist Wahrheit). Vor einer XOR-Operation sollte man also sicherstellen, wirklich true und false statt irgendwas wahrheitsartiges zu haben. Danach kann man die beiden Werte einfach mit != (ungleich) verknüpfen, um festzustellen, ob genau einer von beiden true ist. Wenn a und b zwei Variablen mit wahrheitsartigen Werten sind, kann man zum Beispiel schreiben:

   Boolean(a) != Boolean(b)

um eine XOR-Verknüpfung zu erhalten.

Eine ganz andere Bedeutung hat das ^-Zeichen in der Windows Command-Shell. Hier ist es das Escape-Zeichen, wenn man eins der Steuerzeichen der Shell (beispielsweise die Pipe-Zeichen < und >) ohne seine Sonderfunktion nutzen will.