web-dev-qa-db-ja.com

キャレットが指数の代わりにXORに使用されたのはなぜですか?

以前にこの構文の問題に直面したことがある人にとっては本当に問題ではありませんが、キャレット(^)XOR演算として広く受け入れられている数学のべき乗演算の代わりに。

もちろん、キャレットの(誤った)使用が説明され、修正されている場所はたくさんありますが、なぜに関して明確な情報源に出会ったことはありません。 。

それは利便性の問題でしたか?事故?当然のことながら、推論は言語によって異なる可能性があるため、あらゆる点で情報は洞察に富んでいます。

古い前駆体がありましたが、影響力のあるフランスの数学者ルネデカルトは通常、上付きの指数を導入するための credited です(ab)1637年に発表された彼の著作Geometrieで、数学的記述に組み込まれています。これは、今日でも数学で広く使用されている表記法です。

Fortranは、数値計算に広く使用されている最も古いプログラミング言語であり、指数演算子を提供します。これは、1954年までさかのぼります。指数演算は、二重アスタリスク**で表されます。当時の多くのコンピュータは、キャレット文字^を提供しない 6ビット文字エンコーディング を使用していたことに注意してください。 **の使用は、Pythonなどの累乗演算を提供するさまざまな最近のプログラミング言語の作成者によってその後採用されました。

キャレット^を含む最初に広く採用された文字セットは、1963年に最初に標準化された7ビット [〜#〜] ascii [〜#〜] エンコーディングでした。私が知っている最も古いプログラミング言語指数を表すためにキャレットを使用したのはBASICで、1964年までさかのぼります。IBMが [〜#〜] ebcdic [〜#〜] 文字エンコーディングを採用したのとほぼ同時に、キャレット^も含まれています。

C言語は1972年に誕生しました。C言語は指数演算子を提供せず、pow()などのライブラリ関数を介して指数をサポートします。したがって、C、およびその他のCファミリの言語(C++やCUDAなど)でのべき乗のために、シンボルを別にしておく必要はありません。

一方、それまでのプログラミング言語では一般的ではなかったが、Cはビット単位の演算用のシンボルを提供する。 7ビットで使用できる特殊文字の数ASCIIは制限されていました。たとえば、ANDの&やNOTの~など、特定の特殊文字に対する他の操作の「自然な親和性」があったため、 XORのシンボルにはそれほど多くの選択肢はありませんでした。

XORを具体的に示すために^を選択した理由について、RitchieまたはKernighanによって提供された公開された理論的根拠は知らない; Ritchieの短い history of C はこの問題について言及していない。Cの前身である language B の仕様を見ると、XOR演算子はないが、それ以外のすべての特殊文字はすでに使用されていることがわかります。 ^$@#

[Update]Bの作成者であり、Cの共同作成者の1人であるケントンプソンに、Cとして^を選択する根拠について問い合わせるメールを送信しましたXOR演算子、およびここで回答を共有する許可を求めます。彼の返信(読みやすいように少し再フォーマット):

From:ケントンプソン
送信日:2016年9月29日木曜日4:50 AM
宛先:ノーベルトジュファ
件名:Re:キャレットの選択の背後にある理由XOR Cの演算子?

残ったキャラクターのランダムな選択でした。

もう一度やり直さなければならなかった場合(やりました)、xor(^)とビット補数(〜)に同じ演算子を使用します。

今では^がよりよく知られている演算子であるため、囲碁では^はxorであり、補数でもあります。

参照する「数学」でのべき乗のための^の使用は、実際には1978年まで遡るKnuthのTeXなどの組版システム、1988年まで遡るMathematicaなどの代数システムのコマンドラインインターフェースのずっと後の日付で確立された使用法です。 1990年代初頭のグラフ電卓。

なぜこれらの製品は、累乗に^の使用を採用したのですか?電卓の場合、BASICの影響が疑われます。 1980年代を通じて、それは非常に人気のある最初のプログラミング言語であり、他のソフトウェア製品にも組み込まれました。したがって、この表記法は電卓の多くの購入者に馴染みのあるものでした。私の記憶は曖昧ですが、実際には単純なBASIC通訳を実行する計算機さえあったと思います。

60
njuffa