Несмотря на то, что существовали более ранние предшественники, влиятельный французский математик Рене Декарт, как правило, заслуживает упоминания о введении индексов с надстрочными знаками (a b ) в математическое письмо в своей работе « Геометрия», которая была опубликована в 1637 году. Это обозначение до сих пор повсеместно используется в математике сегодня.
Фортран - самый старый язык программирования, широко используемый для числовых вычислений, который предоставляет оператор возведения в степень, он датируется 1954 годом. Операция возведения в степень обозначается двойной звездочкой **
. Следует отметить, что многие компьютеры в то время использовали 6-битные кодировки символов, которые не обеспечивали символ вставки ^
. **
Впоследствии использование было принято создателями различных более новых языков программирования, которые предлагают операцию возведения в степень, например Python.
Первым широко распространенным набором символов, который содержал каретку, ^
была 7-битная кодировка ASCII, которая впервые была стандартизирована в 1963 году. Самым старым из известных мне языков программирования, использующих каретку для обозначения возведения в степень, является BASIC, который датируется 1964 годом. время IBM приняла кодировку символов EBCDIC , которая также включает в себя каретку ^
.
Язык C появился в 1972 году. Он не предоставляет оператора возведения в степень, а поддерживает возведение в степень с помощью библиотечных функций, таких как pow()
. Поэтому не нужно откладывать символы для возведения в степень в C и других, более поздних языках в семействе C, таких как C ++ и CUDA.
С другой стороны, и необычно для языков программирования до того времени, C предоставляет символы для побитовых операций. Количество специальных символов, доступных в 7-битном ASCII, было ограничено, и поскольку имелась «естественная близость» других операций к определенным специальным символам, например, &
для AND и ~
для NOT, было не так много вариантов для символа для XOR ,
Мне неизвестно об опубликованном обосновании, представленном Ричи или Керниганом, почему они решили специально ^
обозначать XOR; Краткая история Ричи C молчит по этому вопросу. Посмотрите на спецификации предшественника С, языка B , показывает , что у него не было оператора XOR, но уже использовали все специальные символы , кроме ^
, $
, @
, #
.
[Обновление] Я отправил электронное письмо Кену Томпсону, создателю B и одному из со-создателей C, с вопросом о причинах выбора ^
оператора XOR в C и запросом разрешения поделиться ответом здесь. Его ответ (слегка переформатированный для удобства чтения):
От: Кен Томпсон
Отправлено: четверг, 29 сентября 2016 г., 4:50
Кому: Норберт Джуффа
Тема: Re: Обоснование выбора каретки в качестве оператора XOR в C?
это был случайный выбор оставшихся персонажей.
если бы у меня было это сделать снова (что я и сделал), я бы использовал тот же оператор для xor (^) и дополнения битов (~).
поскольку ^ теперь является наиболее известным оператором, в go ^ является xor, а также дополнением.
Использование ^
для возведения в степень в «математике», на которую вы ссылаетесь, на самом деле является использованием, установленным гораздо позже для систем набора текста, таких как TeX Кнута, который датируется 1978 годом, интерфейсов командной строки для систем алгебры, таких как Mathematica, которые датируются 1988 годом, и для построения графиков. калькуляторы в начале 1990-х годов.
Почему эти продукты приняли использование ^
для возведения в степень? В случае калькуляторов я подозреваю влияние Бейсика. В течение 1980-х годов это был очень популярный первый язык программирования, который также был встроен в другие программные продукты. Поэтому обозначение было бы знакомо многим покупателям калькуляторов. Моя память расплывчата, но я думаю, что были даже калькуляторы, которые на самом деле работали с простыми интерпретаторами языка BASIC.