연산자는 표현식에서 하나 이상의 피연산자에 적용되어 새로운 값을 계산하거나 기존 상태를 바꾸는 기호 또는 규칙이다. 수학, 논리학, 프로그래밍에서 모두 쓰이지만, 같은 기호라도 분야에 따라 의미가 달라질 수 있다.[1]

1. 개요

연산자를 이해할 때는 기호 자체뿐 아니라 적용 대상과 문맥을 함께 살펴야 한다. 예를 들어 +는 산술 덧셈을 뜻하지만, 일부 언어에서는 문자열 결합을 가리키기도 한다.[5]

2. 수학과 논리에서의 연산자

수학에서 연산자는 명제을 결합해 새로운 결과를 만드는 역할을 한다.[2] 명제는 참(T) 또는 거짓(F)이라는 진릿값을 가지는 문장이고, 변수를 포함해 일반화된 형태를 이루면 공식이나 논리식으로 다뤄진다.[2][4] AND, OR, NOT과 같은 논리 연산자는 이러한 명제들을 조합해 더 복잡한 판단을 구성한다.[1][4]

논리 연산자의 의미를 설명하는 방법에는 추론 규칙을 중시하는 관점도 있다. 이 관점에서는 연산자가 어떤 결론을 허용하는지가 그 의미를 정한다.[3] 다만 아서 프라이어의 톤크 연산자처럼 아무 문장이나 도출되게 만드는 규칙은 지나치게 강해서, 벨냅의 보수성이나 더밋의 조화 같은 제약이 필요하다는 논의가 이어졌다.[3] 즉, 논리 연산자는 단순한 표기보다 논리 체계의 타당성을 유지하는 장치에 가깝다.

3. 프로그래밍에서의 연산자

프로그래밍 언어에서 연산자는 데이터를 계산하고 프로그램의 상태를 바꾸는 데 쓰인다.[5] 가장 흔한 범주는 산술 연산자, 대입 연산자, 비교 연산자, 논리 연산자다.[5] 산술 연산자는 덧셈, 뺄셈, 곱셈, 나눗셈 같은 계산을 수행하고, 대입 연산자는 계산 결과를 변수에 저장한다.[5] 비교 연산자는 두 값의 관계를 판정해 불리언 값을 돌려주며, 논리 연산자는 여러 조건을 묶어 조건문의 분기를 결정한다.[1][5]

연산자는 우선순위와 결합 방향에 따라 해석이 달라진다. 같은 식이라도 어떤 연산이 먼저 계산되는지에 따라 결과가 달라질 수 있으므로, 프로그래밍 언어의 문법 규칙을 확인하는 일이 중요하다.[5] 또한 실제 코드에서는 ===를 구분하고, &&&처럼 논리 연산과 비트 연산을 혼동하지 않는 것이 필요하다.[5][1]

4. 비트 연산과 컴퓨터 구조

컴퓨터 구조 수준에서는 데이터가 이진수비트로 표현된다. 사람이 쓰는 십진수는 내부적으로 0과 1의 조합으로 바뀌며, 연산자는 이 비트열을 대상으로 동작한다.[5] 특히 음수 표현에는 2의 보수가 널리 쓰이며, 비트를 반전한 뒤 1을 더하는 방식으로 덧셈과 뺄셈을 같은 하드웨어 경로로 처리할 수 있다.[5]

비트 연산은 개별 비트를 직접 조작하는 연산이다. AND, OR, NOT, XOR 같은 연산은 마스크 처리, 플래그 조작, 권한 검사처럼 낮은 수준의 제어에 자주 사용된다.[5] 이런 연산은 중앙처리장치와 메모리 사이에서 데이터를 다루는 기초가 되며, 고수준 언어의 조건문과 계산식을 물리적으로 뒷받침한다.[1][5]

5. 연산자를 읽는 방법

같은 기호라도 맥락이 다르면 다른 연산자가 된다. 예를 들어 산술의 -는 뺄셈이지만, 어떤 언어에서는 단항 부호를 나타내고, 논리식에서는 부정과 관련된 표기와 헷갈릴 수 있다.[5] 그래서 문서를 읽을 때는 기호 하나만 보지 말고, 피연산자의 종류와 반환값의 형식을 함께 확인해야 한다.[1][5]

연산자를 분류할 때는 수학적 의미, 논리적 의미, 프로그래밍상의 구현을 나눠 보는 편이 안전하다.[2][5] 이렇게 구분하면 알고리즘, 조건문, 논리 연산, 산술 같은 관련 개념도 더 정확하게 연결된다.[1][4]

6. 관련 문서

7. 인용 및 각주

[1] Ssites.northwestern.edu(새 탭에서 열림)

[2] Wwww.whitman.edu(새 탭에서 열림)

[3] Llink.springer.com(새 탭에서 열림)

[4] Mmath.libretexts.org(새 탭에서 열림)

[5] Oopentutorials.org(새 탭에서 열림)