Obwohl es ältere Vorläufer gab, wird dem einflussreichen französischen Mathematiker Rene Descartes in seiner 1637 veröffentlichten Arbeit Geometrie in der Regel die Einführung hochgestellter Exponenten (a b ) in das mathematische Schreiben zugeschrieben . Diese Notation wird in der Mathematik bis heute allgemein verwendet.
Fortran ist die älteste Programmiersprache, die häufig für numerische Berechnungen verwendet wird und einen Exponentiationsoperator bereitstellt. Sie stammt aus dem Jahr 1954. Die Exponentiationsoperation wird durch einen doppelten Stern gekennzeichnet **
. Es ist zu beachten, dass viele Computer zu dieser Zeit 6-Bit-Zeichencodierungen verwendeten , die kein Caret-Zeichen lieferten ^
. Die Verwendung von **
wurde später von Entwicklern verschiedener neuerer Programmiersprachen übernommen, die eine Potenzierungsoperation bieten, wie z. B. Python.
Der erste weit verbreitete Zeichensatz, der das Caret enthielt, ^
war die 7-Bit- ASCII- Codierung, die 1963 zum ersten Mal standardisiert wurde. Die älteste mir bekannte Programmiersprache, die das Caret zur Bezeichnung der Exponentiation verwendete, ist BASIC, die auf das Jahr 1964 datiert Zu dieser Zeit übernahm IBM die EBCDIC- Zeichencodierung, die auch das Caret enthält ^
.
Die C-Sprache wurde 1972 eingeführt. Sie bietet keinen Exponentiationsoperator, sondern unterstützt die Exponentiation über Bibliotheksfunktionen wie pow()
. Daher muss kein Symbol für die Exponentiation in C und in anderen, späteren Sprachen der C-Familie wie C ++ und CUDA reserviert werden.
Andererseits und für Programmiersprachen bis zu diesem Zeitpunkt ungewöhnlich, stellt C Symbole für bitweise Operationen bereit. Die Anzahl der Sonderzeichen, die in 7-Bit-ASCII verfügbar waren, war begrenzt, und da es eine "natürliche Affinität" anderer Operationen zu bestimmten Sonderzeichen gab, z. B. &
für AND und ~
für NOT, gab es nicht allzu viele Auswahlmöglichkeiten für das Symbol für XOR .
Mir ist keine veröffentlichte Begründung von Ritchie oder Kernighan bekannt, warum sie sich entschieden haben ^
, XOR spezifisch zu bezeichnen. Ritchies kurze Geschichte von C schweigt zu diesem Thema. Ein Blick auf die Spezifikation für den Vorläufer C, der Sprache B , zeigt , dass es nicht eine XOR - Operator hatte, aber schon alle Sonderzeichen außer verwendet ^
, $
, @
, #
.
[Update] Ich schickte eine E-Mail an Ken Thompson, den Schöpfer von B und einen der Mitschöpfer von C, und erkundigte mich nach den Gründen für die Wahl ^
als XOR-Operator von C und bat um die Erlaubnis, die Antwort hier zu teilen. Seine Antwort (aus Gründen der Lesbarkeit leicht neu formatiert):
Von: Ken Thompson
Gesendet: Donnerstag, 29. September 2016, 04:50 Uhr
An: Norbert Juffa
Betreff: Re: Begründung für die Wahl von Caret als XOR-Operator in C?
Es war eine zufällige Auswahl der verbleibenden Charaktere.
Wenn ich es noch einmal machen müsste (was ich getan habe), würde ich den gleichen Operator für xor (^) und Bitkomplement (~) verwenden.
da ^ jetzt der bekanntere Operator ist, ist ^ in go xor und auch komplementär.
Die Verwendung von ^
für die Exponentiation in "Mathematik", auf die Sie sich beziehen, wird tatsächlich zu einem viel späteren Zeitpunkt für Schriftsatzsysteme wie Knuths TeX aus dem Jahr 1978, Befehlszeilenschnittstellen für Algebra-Systeme wie Mathematica aus dem Jahr 1988 und Graphik verwendet Taschenrechner in den frühen 1990er Jahren.
Warum wurden diese Produkte ^
zur Potenzierung verwendet? Bei Taschenrechnern vermute ich den Einfluss von BASIC. In den achtziger Jahren war es eine sehr beliebte erste Programmiersprache und wurde auch in andere Softwareprodukte eingebettet. Die Schreibweise wäre daher vielen Käufern der Rechner geläufig gewesen. Mein Gedächtnis ist vage, aber ich glaube, es gab sogar Taschenrechner, auf denen einfache BASIC-Interpreter ausgeführt wurden.