{{위키데이터 속성 추적}}
[[프로그래밍 언어]]는 일반적으로 [[연산 (수학)|수학 연산]]과 유사한 '''연산자'''의 집합을 지원한다. 언어는 내장된 연산자의 정해진 숫자를 포함할 수 있다 ([[C와 C++에서의 연산자|C와 C++]]에서 + - * = 연산자의 경우), 아니면 프로그래머가 정의한 연산자의 생성을 허용할 수 있다 ([[하스켈]]의 경우). 일부 프로그래밍 언어는 다른 <code>[[나눗셈#정수의 나눗셈|'''div''']]</code>와 같은 이름도 허용하는 동안 특수 문자 [[덧셈|'''+''']] 또는 [[대입 (컴퓨터 과학)|''':=''']]과 같은 연산자 기호를 제한한다 ([[파스칼 (프로그래밍 언어)|파스칼]]의 경우).

언어에 의해 지원된 내장 연산자 일부는 일반적으로 [[중앙 처리 장치]]에 있는 [[기계어|명령]]의 작은 숫자에 직접 매핑을 하지만, 다른 것은 복잡한 구현을 할 수도 있다. (예를 들어, '+'는 [[문자열 연결]]을 표현하기 위해 사용한다)

언어의 사양은 [[연산의 우선순위|우선순위]]와 그것이 지원하는 연산자의 [[결합법칙]]을 지정한다. 프로그래머가 정의된 연산자를 지원하는 언어는 새로운 연산자의 기호 (예: [[프롤로그]])의 우선순위와 결합법칙의 사양이 필요하다.

대부분의 프로그래밍 언어 연산자는 몇몇 많은 [[피연산자]] (예: C에서 [[?:]] 연산자) 지원과 함께, 하나 또는 두 개의 피연산자를 사용한다. 그것의 피연산자와 관련하여 연산자의 위치는 [[전위 표기법]], [[중위 표기법]] 또는 [[후위 표기법]]일 것이다.

[[구문 (프로그래밍 언어)|구문]] 연산자는 보통 [[함수 (프로그래밍)|함수]]와 대조를 이룬다. 대부분의 언어는, 함수는 아마도 고정된 우선순위 수준과 결합법칙에 대한 전위 연산자의 특별한 형태, [[괄호#.EC.A2.85.EB.A5.98|괄호]]에 대해서 강제적일 것이다. 예: <code>Func(a)</code> (혹은 [[리스프]]에서 <code>(Func a)</code>). 대부분의 언어는 프로그래머가 정의한 기능을 지원하지만, 그들은 더 많은 전위 표기법과 더 많은 우선순위 수준이 없으면 프로그래머가 정의 연산자를 지원하도록 실제로 주장할 수 없다. 의미적으로 연산자는 다른 호출 표기법 및 매개 변수의 제한된 숫자 (보통 1 혹은 2개)에 대한 함수의 특별한 형태로 볼 수 있다.

컴파일러는 [[함수 (프로그래밍)|서브루틴 호출]]이나 [[인라인 확장|인라인 코드]]와 함께 연산자 및 함수 기능을 구현할 수 있다.

== 연산자 오버로딩 ==
{{본문|연산자 오버로딩}}

몇몇의 프로그래밍 언어에서 연산자는 아마도 자료의 한 종류보다 많은 정의를 가지고 있는 ''애드혹 다형성''일 것이다, ([[자바 (프로그래밍 언어)|자바]]에서 같은 <code>+</code> 연산자는 숫자의 덧셈과 문자열의 연결 모두에 사용된다). 이러한 연산자는 ''오버로드된 것''으로 전해지고 있다. 프로그래밍 언어에서 프로그래머가 연산자의 제한된 집합을 가진 연산자 오버로딩을 지원하지만, 연산자 오버로딩은 종종 연산자에 맞게 정의하는 데 사용한다.

== 피연산자 강제 변환 ==
{{참고|형변환}}
몇몇 언어도 암시적으로 변환할 수 있는 연산자의 피연산자, 혹은 [[형변환#암시적 형변환|''강제'']]로 발생하는 연산을 위한 적합한 자료형을 허용한다. 예를 들어, [[펄]]에서 강제적인 규칙 <code>12 + "3.14"</code>에 리드한 <code>15.14</code>의 결과를 산출한다. 문자열 <code>"3.14"</code>는 덧셈이 대신 숫자 3.14로 변환된다. 추가로, <code>12</code>는 정수이고 <code>3.14</code>는 부동 또는 고정 소수점 숫자 중 하나이다 (그것에 소수점 자리를 가진 숫자) 그래서 정수는 그 다음에 각각 [[부동소수점]] 또는 고정 소수점 숫자로 변환된다.

[[자바스크립트]]는 반대 규칙을 따른다—위와 같은 표현을 찾는다면, 문자열<code>"12"</code>는 정수 <code>12</code>로 변환한다면, <code>"123.14"</code> 형태에 두 피연산자를 연결한다.

언어에 의한 지배들의 존재에서, 프로그래머는 미묘한 프로그래밍 오류를 피하기 위해 피연산자 유형 및 작업 결과 유형에 대한 특정 규칙을 인식하고 있어야한다.

== 프로그래밍 언어에서 연산자 기능 ==
{{미완성 목록}}
다음 표는 여러 프로그래밍 언어에서 연산자의 기능을 보여준다.

{| class="wikitable"
|-
!{{nobr|프로그래밍}} 언어
!비 영숫자(nonalphanumeric) 연산자 기호
!영숫자(alphanumeric) 연산자 기호
!전위 표기법
!중위 표기법
!후위 표기법
!우선 순위
!결합 법칙
!오버로딩
!{{nobr|프로그래머}}가 정의한 {{nobr|오버로딩}}
!{{nobr|프로그래머}}가 정의한 {{nobr|연산자}} 기호
|-
| [[ALGOL 68]]
| <code>+* ** * / % %* %× - + &lt; &lt;= >= > = /= & -:= +:= *:= /:= %:= %*:= +=: :=: :/=:</code><br/>
(모든 연산자는 영숫자 등가물을 가지고 있다: 다음 열 참조.<br/>일부는 비 [[미국 정보 교환 표준 부호|아스키(ASCII)]] 등가물을 가지고 있다: 아래를 참조.)<br/>
<code>¬ +× ⊥ ↑ ↓ ⌊ ⌈ × ÷ ÷× ÷* □ ≤ ≥ ≠ ∧ ∨ ×:= ÷:= ÷×:= ÷*:= %×:= :≠:</code>
| <code>not abs arg bin entier leng level odd repr round shorten i shl shr up down lwb upb lt le ge gt eq ne and or over mod elem minusab plusab timesab divab overab modab plusto is isnt</code>
| {{Yes}}
| {{Yes}}
| {{No}}
| {{Yes}}<ref>전위 연산자는 항상 우선 순위가 10이다.</ref>
| 중위 연산자는 왼쪽 결합, 전위 연산자는 오른쪽 결합이다.
| {{Yes}}
| {{Yes}}
| {{Yes}}
|-
| [[C (프로그래밍 언어)|C]]<ref name="c_op"/>
| rowspan="3" | <code>() [] -> . ! ~ ++ -- + - * & / % << >> < <= > <= == != ^ <nowiki>|</nowiki> && <nowiki>||</nowiki> [[?:]] = += -= *= /= %= &= ^= |= <<= >>=</code>
| <code>[[sizeof]]</code>
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
|-
| [[C++]]<ref name="c_op">[[C와 C++에서의 연산자|더 보기]]</ref>
| <code>[[sizeof]] [[new와 delete (C++)|new]] [[new와 delete (C++)|delete]] [[예외 처리|throw]]</code>
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{No}}
|-
| [[자바 (프로그래밍 언어)|자바]]
| <code>new [[instanceof]]</code>
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
|-
| [[파스칼 (프로그래밍 언어)|파스칼]]
| <code>* / + - = < > <> <= >= :=</code>
| <code>[[부정#프로그래밍|not]] [[나눗셈#정수의 나눗셈|div]] [[모듈러 연산|mod]] [[논리곱|and]] [[논리합|or]] in</code>
| {{Yes}}
| {{Yes}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
|-
| [http://seed7.sourceforge.net Seed7]
| <code>{} [] -> ** ! + - * / << >> & >< <nowiki>|</nowiki> = <> > >= < <= <& := +:= -:= *:= /:= <<:= >>:= &:= @:=</code>
| <code>conv varConv parse [[복소켤레|conj]] [[나눗셈#정수의 나눗셈|div]] [[나머지|rem]] [[모듈러 연산|mdiv]] [[모듈러 연산|mod]] times mult in [[부정#프로그래밍|not]] [[논리곱|and]] [[논리합|or]] digits lpad rpad lpad0</code>
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
|-
| [[프롤로그]]
| <code>:- ?- ; , . =.. = \= < =< >= > == \== - + / *</code>
| <code>spy nospy not is mod</code>
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
| {{Yes}}
|-
| [[리스프]]
| <code>+ - * / = /= < <= > >=</code>
| <code>mod rem floor truncate min max</code>
| {{Yes}}<ref>연산자와 매개 변수는 괄호로 둘러싸여 있어야 한다.</ref>
| {{No}}
| {{No}}
| {{No}}
| {{No}}
| {{Yes}}
| {{No}}
| {{Yes}}
|-
| [[스몰토크]]
| (예 - 최대 두 문자<ref name="BinaryMessages">{{언어링크|en}} {{웹 인용|first=Adele|last=Goldberg|url=http://stephane.ducasse.free.fr/FreeBooks/BlueBook/Bluebook.pdf|title=Smalltalk-80: The Language and its Implementation, p. 27, ISBN 0-201-11371-6}}</ref>)
| (예 - 키워드 뒤에 콜론이 필요하다)
| {{No}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
|}

== 종류 ==
* [[대입연산자]]
* [[증감연산자]]
* [[비트 연산|비트연산자]]
* [[논리연산자]]
* [[우선순위연산자]]

== 같이 보기 ==
* [[관계형 연산자]]
* [[제어문]]

== 각주 ==
{{각주}}

{{프로그래밍 구성체}}

[[분류:연산자 (프로그래밍)|*]]
[[분류:프로그래밍 구성체]]