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