연산자 (프로그래밍)

프로그래밍 언어는 일반적으로 수학 연산과 유사한 **연산자**의 집합을 지원한다. 언어는 내장된 연산자의 정해진 숫자를 포함할 수 있다 (C와 C++에서 + - * = 연산자의 경우), 아니면 프로그래머가 정의한 연산자의 생성을 허용할 수 있다 (하스켈의 경우). 일부 프로그래밍 언어는 다른 `**div**`와 같은 이름도 허용하는 동안 특수 문자 **+** 또는 **:=**과 같은 연산자 기호를 제한한다 (파스칼의 경우). 언어에 의해 지원된 내장 연산자 일부는 일반적으로 중앙 처리 장치에 있는 명령의 작은 숫자에 직접 매핑을 하지만, 다른 것은 복잡한 구현을 할 수도 있다. (예를 들어, '+'는 문자열 연결을 표현하기 위해 사용한다) 언어의 사양은 우선순위와 그것이 지원하는 연산자의 결합법칙을 지정한다. 프로그래머가 정의된 연산자를 지원하는 언어는 새로운 연산자의 기호 (예: 프롤로그)의 우선순위와 결합법칙의 사양이 필요하다. 대부분의 프로그래밍 언어 연산자는 몇몇 많은 피연산자 (예: C에서 ?: 연산자) 지원과 함께, 하나 또는 두 개의 피연산자를 사용한다. 그것의 피연산자와 관련하여 연산자의 위치는 전위 표기법, 중위 표기법 또는 후위 표기법일 것이다. 구문 연산자는 보통 함수와 대조를 이룬다. 대부분의 언어는, 함수는 아마도 고정된 우선순위 수준과 결합법칙에 대한 전위 연산자의 특별한 형태, 괄호에 대해서 강제적일 것이다. 예: `Func(a)` (혹은 리스프에서 `(Func a)`). 대부분의 언어는 프로그래머가 정의한 기능을 지원하지만, 그들은 더 많은 전위 표기법과 더 많은 우선순위 수준이 없으면 프로그래머가 정의 연산자를 지원하도록 실제로 주장할 수 없다. 의미적으로 연산자는 다른 호출 표기법 및 매개 변수의 제한된 숫자 (보통 1 혹은 2개)에 대한 함수의 특별한 형태로 볼 수 있다. 컴파일러는 서브루틴 호출이나 인라인 코드와 함께 연산자 및 함수 기능을 구현할 수 있다.
# 연산자 오버로딩
연산자 오버로딩 몇몇의 프로그래밍 언어에서 연산자는 아마도 자료의 한 종류보다 많은 정의를 가지고 있는 *애드혹 다형성*일 것이다, (자바에서 같은 `+` 연산자는 숫자의 덧셈과 문자열의 연결 모두에 사용된다). 이러한 연산자는 *오버로드된 것*으로 전해지고 있다. 프로그래밍 언어에서 프로그래머가 연산자의 제한된 집합을 가진 연산자 오버로딩을 지원하지만, 연산자 오버로딩은 종종 연산자에 맞게 정의하는 데 사용한다.
# 피연산자 강제 변환
몇몇 언어도 암시적으로 변환할 수 있는 연산자의 피연산자, 혹은 *강제*로 발생하는 연산을 위한 적합한 자료형을 허용한다. 예를 들어, 펄에서 강제적인 규칙 `12 + "3.14"`에 리드한 `15.14`의 결과를 산출한다. 문자열 `"3.14"`는 덧셈이 대신 숫자 3.14로 변환된다. 추가로, `12`는 정수이고 `3.14`는 부동 또는 고정 소수점 숫자 중 하나이다 (그것에 소수점 자리를 가진 숫자) 그래서 정수는 그 다음에 각각 부동소수점 또는 고정 소수점 숫자로 변환된다. 자바스크립트는 반대 규칙을 따른다—위와 같은 표현을 찾는다면, 문자열`"12"`는 정수 `12`로 변환한다면, `"123.14"` 형태에 두 피연산자를 연결한다. 언어에 의한 지배들의 존재에서, 프로그래머는 미묘한 프로그래밍 오류를 피하기 위해 피연산자 유형 및 작업 결과 유형에 대한 특정 규칙을 인식하고 있어야한다.
# 프로그래밍 언어에서 연산자 기능
미완성 목록 다음 표는 여러 프로그래밍 언어에서 연산자의 기능을 보여준다. {| class="wikitable" |- !프로그래밍 언어 !비 영숫자(nonalphanumeric) 연산자 기호 !영숫자(alphanumeric) 연산자 기호 !전위 표기법 !중위 표기법 !후위 표기법 !우선 순위 !결합 법칙 !오버로딩 !프로그래머가 정의한 오버로딩 !프로그래머가 정의한 연산자 기호 |- | ALGOL 68 | `+* ** * / % %* %× - + = > = /= & -:= +:= *:= /:= %:= %*:= +=: :=: :/=:`
(모든 연산자는 영숫자 등가물을 가지고 있다: 다음 열 참조.
일부는 비 아스키(ASCII) 등가물을 가지고 있다: 아래를 참조.)
`¬ +× ⊥ ↑ ↓ ⌊ ⌈ × ÷ ÷× ÷* □ ≤ ≥ ≠ ∧ ∨ ×:= ÷:= ÷×:= ÷*:= %×:= :≠:` | `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` | Yes | Yes | No | Yes전위 연산자는 항상 우선 순위가 10이다. | 중위 연산자는 왼쪽 결합, 전위 연산자는 오른쪽 결합이다. | Yes | Yes | Yes |- | C | rowspan="3" | `() [] -> . ! ~ ++ -- + - * & / % > >=` | `sizeof` | Yes | Yes | Yes | Yes | Yes | Yes | No | No |- | C++더 보기 | `sizeof new delete throw` | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |- | 자바 | `new instanceof` | Yes | Yes | Yes | Yes | Yes | Yes | No | No |- | 파스칼 | `* / + - = <> = :=` | `not div mod and or in` | Yes | Yes | No | Yes | Yes | Yes | No | No |- | Seed7 | `{} [] -> ** ! + - * / > & > > >= >:= &:= @:=` | `conv varConv parse conj div rem mdiv mod times mult in not and or digits lpad rpad lpad0` | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |- | 프롤로그 | `:- ?- ; , . =.. = \= = >
# \
- + / *` | `spy nospy not is mod` | Yes | Yes | Yes | Yes | Yes | No | No | Yes |- | 리스프 | `+ - * / = /= >=` | `mod rem floor truncate min max` | Yes연산자와 매개 변수는 괄호로 둘러싸여 있어야 한다. | No | No | No | No | Yes | No | Yes |- | 스몰토크 | (예 - 최대 두 문자en title=Smalltalk-80: The Language and its Implementation, p. 27, ISBN 0-201-11371-6) | (예 - 키워드 뒤에 콜론이 필요하다) | No | Yes | Yes | No | No | Yes | Yes | Yes |}
# 종류
* 대입연산자 * 증감연산자 * 비트연산자 * 논리연산자 * 우선순위연산자