왜 캐럿이 지수 대신 XOR에 사용 되었습니까?


32

그것은 이전 에이 구문 문제에 직면 한 사람에게는 실제로 문제가되지는 않지만 ^, 널리 인정되는 수학적 지수 연산 대신 XOR 연산으로 캐럿 ( )을 사용하여 생겨난 혼란이 있습니다 .

물론 캐럿의 (오용) 사용이 설명되고 수정되는 곳이 많이 있지만 캐럿 에게 다른 의미를 부여 했는지에 대한 명확한 출처를 찾지 못했습니다 .

편리 성의 문제였습니까? 사고? 분명히 여러 가지 언어에 대한 추론이 다를 수 있으므로 어떤 점에서든 정보는 통찰력이 있습니다.


답변:


58

더 오래된 선구자가 있었음에도 불구하고, 영향력있는 프랑스 수학자 인 Rene Descartes는 일반적으로 1637 년에 출판 된 그의 작업 Geometrie 에서 위첨자 지수 (a b )를 수학 글쓰기 에 도입 한 것으로 유명 합니다.

포트란은 지수 연산을 제공하는 숫자 계산에 널리 사용되는 가장 오래된 프로그래밍 언어이며, 1954 년으로 거슬러 올라갑니다. 지수 연산은 이중 별표로 표시됩니다 **. 당시 많은 컴퓨터 는 캐럿 문자를 제공하지 않은 6 비트 문자 인코딩 을 사용했습니다 ^. **이후 파이썬과 같은 지수 연산을 제공하는 다양한 최신 프로그래밍 언어를 만든 사람들이이 사용을 채택했습니다.

캐럿 ^이 포함 된 첫 번째 널리 채택 된 문자 집합 은 1963 년에 처음 표준화 된 7 비트 ASCII 인코딩이었습니다. 필자가 알고있는 가장 오래된 프로그래밍 언어는 지수를 나타 내기 위해 캐럿을 사용한 것으로 BASIC이며 1964 년으로 거슬러 올라갑니다. IBM 은 캐럿을 포함하는 EBCDIC 문자 인코딩을 채택했습니다 ^.

C 언어는 1972 년에 등장했습니다. 지수 연산자는 제공하지 않고, 같은 라이브러리 함수를 통한 지수화를 지원합니다 pow(). 따라서 C 및 C ++ 및 CUDA와 같은 C 계열 언어의 지수화를 위해 기호를 따로 따로 설정할 필요가 없습니다.

반면에, 그 당시까지 프로그래밍 언어에서는 흔하지 않은 C는 비트 연산을위한 기호를 제공합니다. 7 비트 ASCII에서 사용할 수있는 특수 문자의 수는 제한되어 있으며 특정 특수 문자 (예 : &AND 및 ~NOT)에 대한 다른 작업의 "자연적 선호도" 가 있었기 때문에 XOR 기호에 대한 선택이 많지 않았습니다. .

Ritchie 또는 Kernighan이 ^XOR을 구체적으로 표시 하기 로 선택한 이유에 대해 제공된 근거를 알지 못합니다 . 리치의 짧은 C 역사는 이 문제에 대해 침묵하고있다. C의에 전구체의 사양에보기 언어 B는 , 그것이 XOR 연산자를 가지고 있지 않은 것을 알 수 있지만, 이미 이외의 모든 특수 문자를 사용 ^, $, @, #.

[업데이트] 저는 B의 제작자이자 C의 공동 제작자 중 한 사람인 Ken Thompson에게 ^C의 XOR 연산자로 선택하는 근거에 대한 질문을하고 여기에 답변을 공유 할 수있는 권한을 요청하는 이메일을 보냈습니다 . 그의 답변 (가독성을 위해 약간 재구성) :


보낸 사람 : Ken Thompson 보낸
날짜 : 2016 년 9 월 29 일 목요일 오전 4:50받는 사람 : Norbert Juffa
제목 : Re : C에서 XOR 연산자로 캐럿을 선택한 이유는 무엇입니까?

남은 캐릭터를 무작위로 선택했습니다.

내가 그것을 다시 수행해야한다면 (내가 한) xor (^) 및 비트 보수 (~)에 동일한 연산자를 사용합니다.

^는 이제 더 잘 알려진 연산자이기 때문에 ^는 xor이고 또한 보수입니다.

^당신이 말하는 "수학"에서의 지수 의 사용 은 실제로 1978 년에 시작된 Knuth의 TeX와 같은 조판 시스템, 1988 년까지의 Mathematica와 같은 대수 시스템에 대한 명령 행 인터페이스 및 그래프 작성을 위해 훨씬 나중에 설립 된 사용법입니다. 1990 년대 초의 계산기.

이 제품들은 왜 ^지수 의 사용을 채택 했습니까? 계산기의 경우 BASIC의 영향을 의심합니다. 1980 년대에이 언어는 매우 인기있는 첫 프로그래밍 언어였으며 다른 소프트웨어 제품에도 포함되었습니다. 따라서이 표기법은 많은 계산기 구매자에게 친숙했을 것입니다. 내 기억은 모호하지만 실제로 간단한 기본 통역사를 운영하는 계산기조차 있다고 생각합니다.


4
그것은 좋은 역사 교훈입니다. 따라서 실제 질문은 "Tex의 소프트웨어 (및 그 기간의 다른 소프트웨어)가 XOR 기호를 사용하기로 결정한 이유는 무엇입니까?"입니다. ;)
AxelH

5
@AxelH 실제로는 그렇지 않습니다. TeX는 위첨자에 사용 ^합니다 . 그리고 위첨자에는 "위"문자를, 아래 첨자에는 "아래"문자 ( ) 를 사용하는 것이 좋습니다 . _
svick

2
@ AxelH 나는 svick이 ^위 화살표를 제안 한다는 것을 동의합니다 . 나는 도날드 크 누스가 ^TeX에서 지수화에 사용 하기로 한 그의 결정에 관해 문의하는 이메일에 답장을 보낼 것이라고 확신 하지만, TAOCP 완료와 같은 더 중요한 일에 바쁘다는 것을 감안할 때, 나는 그 단계를 원하지 않았다. 그것).
njuffa

7
en.wikipedia.org/wiki/Caret 에 따르면 Algol 60은 지수화를 위해 위쪽을 가리키는 화살표를 사용했으며 원래 ASCII는 현재 캐럿 기호가있는 동일한 코드 포인트에 위쪽 화살표가 있었으므로 두 개는 분명히 거의 같은 시간에 서로 동일합니다.
Periata Breatta

4
정말 좋은 역사적 대답. C가 지수 대신 비트 연산자를 구현하는 이유를 추가하고 싶습니다. C의 목표는 프로그래머가 CPU가 기본적으로 지원하는 많은 부분에 프로그래머가 쉽게 액세스 할 수 있도록하는 저수준 언어입니다. 그리고 CPU는 항상 비트 조작 명령어를 제공하지만 지수에 대한 특별한 명령어가있는 단일 CPU는 알지 못합니다. 따라서 지수화에는 항상 루프 (적어도 정수 산술 포함)가 필요하며 C에는 언어 구조 뒤에 루프를 숨기는 단일 기능이 없습니다.
cmaster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.