C 언어
연산자(operator)는 컴파일러에게 특정 수학적 또는 논리적 조작을 수행하도록 지시하는 기호입니다. C++은 풍부한 내장 연산자를 제공하며 다음과 같은 유형이 있습니다.
이 장에서는 산술, 관계, 논리, 비트, 대입 및 기타 연산자를 하나씩 살펴보겠습니다.
C++ 언어가 지원하는 산술 연산자는 다음과 같습니다.
변수 A가 10, 변수 B가 20을 담고 있다고 가정하면:
| 연산자 | 설명 | 예시 |
|---|---|---|
| + | 두 피연산자 더하기 | A + B = 30 |
| - | 첫 번째 피연산자에서 두 번째 빼기 | A - B = -10 |
| * | 두 피연산자 곱하기 | A * B = 200 |
| / | 분자를 분모로 나누기 | B / A = 2 |
| % | 모듈러스 연산자, 정수 나눗셈 후 나머지 | B % A = 0 |
| ++ | 증가 연산자, 정수 값을 1 증가 | A++ = 11 |
| -- | 감소 연산자, 정수 값을 1 감소 | A-- = 9 |
C++ 언어가 지원하는 관계 연산자는 다음과 같습니다.
변수 A가 10, 변수 B가 20을 담고 있다고 가정하면:
| 연산자 | 설명 | 예시 |
|---|---|---|
| == | 두 피연산자 값이 같은지 검사, 같으면 true | (A == B) is not true |
| != | 두 피연산자 값이 다른지 검사, 다르면 true | (A != B) is true |
| > | 좌측 피연산자가 우측보다 큰지 검사, 크면 true | (A > B) is not true |
| < | 좌측 피연산자가 우측보다 작은지 검사, 작으면 true | (A < B) is true |
| >= | 좌측 피연산자가 우측보다 크거나 같은지 검사 | (A >= B) is not true |
| <= | 좌측 피연산자가 우측보다 작거나 같은지 검사 | (A <= B) is true |
C++ 언어가 지원하는 논리 연산자는 다음과 같습니다.
변수 A가 1, 변수 B가 0을 담고 있다고 가정하면:
| 연산자 | 설명 | 예시 |
|---|---|---|
| && | 논리 AND. 두 피연산자가 모두 0이 아니면 true | (A && B) is false |
| || | 논리 OR. 두 피연산자 중 하나라도 0이 아니면 true | (A || B) is true |
| ! | 논리 NOT. 피연산자의 논리 상태를 반전 | !(A && B) is true |
비트 연산자는 비트 단위로 작동하며 비트별 연산을 수행합니다. &, |, ^의 진리표:
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
A = 60, B = 13이라고 가정하면 이진 형식으로:
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011
C++이 지원하는 비트 연산자 표. 변수 A가 60, 변수 B가 13을 담고 있다고 가정하면:
| 연산자 | 설명 | 예시 |
|---|---|---|
| & | 이진 AND. 두 피연산자 모두에 비트가 있으면 결과에 복사 | (A & B) = 12 (0000 1100) |
| | | 이진 OR. 어느 피연산자에든 비트가 있으면 복사 | (A | B) = 61 (0011 1101) |
| ^ | 이진 XOR. 한 피연산자에만 비트가 설정된 경우 복사 | (A ^ B) = 49 (0011 0001) |
| ~ | 이진 1의 보수. 단항 연산자, 비트 '반전' 효과 | (~A) = -61 (2's complement 형태에서 1100 0011) |
| << | 이진 좌측 시프트. 좌측 피연산자 값을 우측 피연산자 지정 비트 수만큼 왼쪽으로 이동 | A << 2 = 240 (1111 0000) |
| >> | 이진 우측 시프트. 좌측 피연산자 값을 우측 피연산자 지정 비트 수만큼 오른쪽으로 이동 | A >> 2 = 15 (0000 1111) |
C++ 언어가 지원하는 대입 연산자:
| 연산자 | 설명 | 예시 |
|---|---|---|
| = | 단순 대입. 우측 피연산자 값을 좌측 피연산자에 대입 | C = A + B는 A+B 값을 C에 대입 |
| += | 더하기 대입. 우측 피연산자를 좌측에 더하고 결과를 좌측에 대입 | C += A는 C = C + A와 동일 |
| -= | 빼기 대입. 우측 피연산자를 좌측에서 빼고 결과를 좌측에 대입 | C -= A는 C = C - A와 동일 |
| *= | 곱하기 대입. 우측 피연산자를 좌측에 곱하고 결과를 좌측에 대입 | C *= A는 C = C * A와 동일 |
| /= | 나누기 대입. 좌측 피연산자를 우측으로 나누고 결과를 좌측에 대입 | C /= A는 C = C / A와 동일 |
| %= | 모듈러스 대입. 두 피연산자로 모듈러스 연산 후 결과를 좌측에 대입 | C %= A는 C = C % A와 동일 |
| <<= | 좌측 시프트 대입 연산자 | C <<= 2는 C = C << 2와 동일 |
| >>= | 우측 시프트 대입 연산자 | C >>= 2는 C = C >> 2와 동일 |
| &= | 비트 AND 대입 연산자 | C &= 2는 C = C & 2와 동일 |
| ^= | 비트 배타적 OR 대입 연산자 | C ^= 2는 C = C ^ 2와 동일 |
| |= | 비트 포함 OR 대입 연산자 | C |= 2는 C = C | 2와 동일 |
C++이 지원하는 기타 연산자들:
| 번호 | 연산자 및 설명 | |
|---|---|---|
| 1 | sizeof 변수의 크기를 반환. 예: sizeof(a), a가 int면 4 반환 | |
| 2 | Condition ? X : Y 조건 연산자(?). Condition이 true면 X 값, 아니면 Y 값 반환 | |
| 3 | , 콤마 연산자. 연산 시퀀스를 수행. 전체 콤마 표현식의 값은 리스트의 마지막 표현식 값 | |
| 4 | . (dot) and -> (arrow) 멤버 연산자. 클래스, 구조체, 공용체의 개별 멤버 참조에 사용 | |
| 5 | Cast 형 변환 연산자. 한 데이터 타입을 다른 타입으로 변환. 예: int(2.2000)는 2 반환 | |
| 6 | & 포인터 연산자 &. 변수의 주소 반환. 예: &a는 변수 a의 실제 주소 | |
| 7 | * | 포인터 연산자 *. 변수 가리킴. 예: *var는 변수 var 가리킴 |
연산자 우선순위는 표현식에서 항의 그룹화를 결정합니다. 이는 표현식 평가 방식에 영향을 줍니다. 특정 연산자는 다른 연산자보다 높은 우선순위를 가집니다. 예: 곱셈 연산자는 덧셈 연산자보다 높은 우선순위.
예: x = 7 + 3 * 2에서 x에는 20이 아닌 13이 대입됩니다. *가 +보다 높은 우선순위이므로 3*2가 먼저 계산되고 7에 더해지기 때문입니다.
아래 표에서 가장 높은 우선순위 연산자가 위에, 가장 낮은 것이 아래에 있습니다. 표현식 내에서 높은 우선순위 연산자가 먼저 평가됩니다.
| 범주 | 연산자 | 결합성 |
|---|---|---|
| 후위(Postfix) | () [] -> . ++ -- | 왼쪽에서 오른쪽 |
| 단항(Unary) | + - ! ~ ++ -- (type)* & sizeof | 오른쪽에서 왼쪽 |
| 승법(Multiplicative) | * / % | 왼쪽에서 오른쪽 |
| 가법(Additive) | + - | 왼쪽에서 오른쪽 |
| 시프트(Shift) | << >> | 왼쪽에서 오른쪽 |
| 관계(Relational) | < <= > >= | 왼쪽에서 오른쪽 |
| 등가(Equality) | == != | 왼쪽에서 오른쪽 |
| 비트 AND | & | 왼쪽에서 오른쪽 |
| 비트 XOR | ^ | 왼쪽에서 오른쪽 |
| 비트 OR | | | 왼쪽에서 오른쪽 |
| 논리 AND | && | 왼쪽에서 오른쪽 |
| 논리 OR | || | 왼쪽에서 오른쪽 |
| 조건(Conditional) | ?: | 오른쪽에서 왼쪽 |
| 대입(Assignment) | = += -= *= /= %= >>= <<= &= ^= |= | 오른쪽에서 왼쪽 |
| 콤마(Comma) | , | 왼쪽에서 오른쪽 |
C 언어
C++ 연산자 오버로딩 이 튜토리얼에서는 예제와 함께 연산자 오버로딩을 학습합니다. C++에서는 객체와 구조체 같은 사용자 정의 타입에 대해 연산자 작동 방식을 변경할 수 있습니다. 이를 연산자 오버로딩(operator overloading)이라 합니다. 예를 들어, Complex 클래스로 표현되는 복소수 객체 c1, c2, result 세 개를 만들었다고 가정합시다. 연산자 오버로딩으로 + 연산자 작동 방식을 재정의하면, 다음과 같이 c1과 c2의 복소수를 더할 수 있습니다: result = c1 + c2; 다음과 같은 방식 대
C++ 상속 이 튜토리얼에서는 예제를 통해 C++의 상속에 대해 학습합니다. 소개 상속은 C++에서 객체 지향 프로그래밍의 핵심 기능 중 하나입니다. 기존 클래스(기반 클래스)로부터 새로운 클래스(파생 클래스)를 생성할 수 있게 해줍니다. 파생 클래스는 기반 클래스의 기능을 상속받으며 자체적인 추가 기능을 가질 수 있습니다. 예를 들어: class Animal { // eat() 함수 // sleep() 함수 }; class Dog : public Animal { // bark() 함수 }; 여기서 Dog 클래