C++ 연산자: 프로그래밍 마법의 관문
안녕하세요, 미래의 코딩 마법사 여러분! 오늘 우리는 C++ 연산자의 세계로 흥미로운 여정을 떠납니다. 초보자라고 걱정하지 마세요 - 저는 여러분을每步 안내해 드릴 것입니다. 수년 동안 수많은 학생들을 가르친 경험을 바탕으로 말이죠. 그럼 가상의 지팡이( 키보드 )를 잡고, 프로그래밍의 마법을 부르세요!

연산자란 무엇인가요?
들어가기 전에 연산자가 무엇인지 이해해 보겠습니다. C++에서 연산자는 컴퓨터가 특정 수학적 또는 논리적 연산을 수행하도록 지시하는 특별한 기호입니다. 마법의 책에 있는 마법 말들처럼, 각각의 연산자는 고유한 역할을 합니다!
산술 연산자
기본적인 것으로 시작해 보겠습니다 - 산술 연산자. 수학 수업에서 익숙한 것들입니다. 이제 우리는 컴퓨터가 우리 대신 계산을 수행하도록 합니다!
다음은 C++의 산술 연산자 표입니다:
| 연산자 | 설명 | 예제 |
|---|---|---|
| + | 덧셈 | a + b |
| - | 뺄셈 | a - b |
| * | 곱셈 | a * b |
| / | 나눗셈 | a / b |
| % | 나머지 | a % b |
| ++ | 증가 | a++ or ++a |
| -- | 감소 | a-- or --a |
이제 이들을 실제로 사용해 보겠습니다:
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 3;
cout << "a + b = " << a + b << endl; // Output: 13
cout << "a - b = " << a - b << endl; // Output: 7
cout << "a * b = " << a * b << endl; // Output: 30
cout << "a / b = " << a / b << endl; // Output: 3
cout << "a % b = " << a % b << endl; // Output: 1
cout << "a++ = " << a++ << endl; // Output: 10
cout << "Now a = " << a << endl; // Output: 11
cout << "++b = " << ++b << endl; // Output: 4
cout << "Now b = " << b << endl; // Output: 4
return 0;
}
이 예제에서 우리는 다양한 산술 연산을 수행하고 있습니다. a++이 10을 출력하고 나서 a가 11이 되는 것을 주목하세요. a++은 후위 증가 - 값 사용 후 증가합니다. 반면에 ++b는 전위 증가 - 값 증가 후 사용합니다.
관계 연산자
다음으로 관계 연산자를 다루겠습니다. 이 연산자는 값을 비교하고 참(1) 또는 거짓(0)을 반환합니다. 마법 대결의 심판들처럼입니다!
다음은 관계 연산자 표입니다:
| 연산자 | 설명 | 예제 |
|---|---|---|
| == | 같다 | a == b |
| != | 다르다 | a != b |
| > | 크다 | a > b |
| < | 작다 | a < b |
| >= | 크거나 같다 | a >= b |
| <= | 작거나 같다 | a <= b |
이제 이들을 실제로 사용해 보겠습니다:
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 5;
cout << "a == b is " << (a == b) << endl; // Output: 0 (거짓)
cout << "a != b is " << (a != b) << endl; // Output: 1 ( 참)
cout << "a > b is " << (a > b) << endl; // Output: 1 ( 참)
cout << "a < b is " << (a < b) << endl; // Output: 0 (거짓)
cout << "a >= b is " << (a >= b) << endl; // Output: 1 ( 참)
cout << "a <= b is " << (a <= b) << endl; // Output: 0 (거짓)
return 0;
}
이 마법의 프로그램에서 우리는 a와 b를 다양한 관계 연산자로 비교하고 있습니다. C++에서 참은 1로, 거짓은 0으로 표현됩니다.
논리 연산자
이제 우리의 마법에 논리를 추가하겠습니다! 논리 연산자는 조건문을 결합하는 데 사용됩니다.
다음은 논리 연산자 표입니다:
| 연산자 | 설명 | 예제 |
|---|---|---|
| && | 논리 AND | a && b |
| || | 논리 OR | a || b |
| ! | 논리 NOT | !a |
이제 이들을 사용해 보겠습니다:
#include <iostream>
using namespace std;
int main() {
bool a = true, b = false;
cout << "a && b is " << (a && b) << endl; // Output: 0 (거짓)
cout << "a || b is " << (a || b) << endl; // Output: 1 ( 참)
cout << "!a is " << (!a) << endl; // Output: 0 (거짓)
cout << "!b is " << (!b) << endl; // Output: 1 ( 참)
return 0;
}
이 마법의 기도에서 우리는 논리 연산자를 사용하여 부울 값을 결합하거나 부정합니다. &&은 두 연산자가 모두 참일 때 참을 반환하고, ||은 적어도 하나의 연산자가 참일 때 참을 반환합니다.
비트 연산자
이제 고급 마법의 세계로 진입합니다 - 비트 연산자. 이 연산자는 정수의 각 비트에 대해 연산을 수행합니다. 마법의 마이크로 스편들처럼!
다음은 비트 연산자 표입니다:
| 연산자 | 설명 | 예제 |
|---|---|---|
| & | 비트 AND | a & b |
| | | 비트 OR | a | b |
| ^ | 비트 XOR | a ^ b |
| ~ | 비트 NOT | ~a |
| << | 왼쪽 이동 | a << n |
| >> | 오른쪽 이동 | a >> n |
이제 이들을 실제로 사용해 보겠습니다:
#include <iostream>
using namespace std;
int main() {
unsigned int a = 60; // 60 = 0011 1100 in binary
unsigned int b = 13; // 13 = 0000 1101 in binary
cout << "a & b = " << (a & b) << endl; // Output: 12 (0000 1100 in binary)
cout << "a | b = " << (a | b) << endl; // Output: 61 (0011 1101 in binary)
cout << "a ^ b = " << (a ^ b) << endl; // Output: 49 (0011 0001 in binary)
cout << "~a = " << (~a) << endl; // Output: -61 (1100 0011 in binary)
cout << "a << 2 = " << (a << 2) << endl; // Output: 240 (1111 0000 in binary)
cout << "a >> 2 = " << (a >> 2) << endl; // Output: 15 (0000 1111 in binary)
return 0;
}
이 마법의 주문에서 우리는 우리의 숫자의 각 비트에 대해 연산을 수행하고 있습니다. 예를 들어, &는 각 비트 쌍에 대해 AND 연산을 수행합니다.
할당 연산자
할당 연산자는 변수에 값을 할당하는 데 사용됩니다. 마법의 깃펜처럼!
다음은 할당 연산자 표입니다:
| 연산자 | 설명 | 예제 |
|---|---|---|
| = | 간단한 할당 | a = b |
| += | 더하고 할당 | a += b |
| -= | 뺄고 할당 | a -= b |
| *= | 곱하고 할당 | a *= b |
| /= | 나누고 할당 | a /= b |
| %= | 나머지하고 할당 | a %= b |
| <<= | 왼쪽 이동하고 할당 | a <<= b |
| >>= | 오른쪽 이동하고 할당 | a >>= b |
| &= | 비트 AND하고 할당 | a &= b |
| ^= | 비트 XOR하고 할당 | a ^= b |
| |= | 비트 OR하고 할당 | a |= b |
이제 이들을 사용해 보겠습니다:
#include <iostream>
using namespace std;
int main() {
int a = 10;
cout << "Initial value of a: " << a << endl;
a += 5; // Equivalent to: a = a + 5
cout << "After a += 5: " << a << endl;
a -= 3; // Equivalent to: a = a - 3
cout << "After a -= 3: " << a << endl;
a *= 2; // Equivalent to: a = a * 2
cout << "After a *= 2: " << a << endl;
a /= 4; // Equivalent to: a = a / 4
cout << "After a /= 4: " << a << endl;
a %= 3; // Equivalent to: a = a % 3
cout << "After a %= 3: " << a << endl;
return 0;
}
이 마법의 스크립트에서 우리는 다양한 할당 연산자를 사용하여 a의 값을 수정하고 있습니다. 이 연산자는 할당과 다른 연산을 동시에 수행하여 코드를 간결하게 합니다.
기타 연산자
C++는 다른 범주에 들어맞지 않는 몇 가지 연산자도 가지고 있습니다. 이들은 마법의 와일드 카드처럼!
다음은 기타 연산자 표입니다:
| 연산자 | 설명 | 예제 |
|---|---|---|
| sizeof | 변수의 크기 반환 | sizeof(a) |
| ?: | 삼항 연산자 | condition ? expr1 : expr2 |
| & | 변수의 주소 반환 | &a |
| * | 포인터 변수 | *ptr |
| . | 구조체 변수의 멤버 접근 | object.member |
| -> | 포인터를 통한 구조체 변수의 멤버 접근 | ptr->member |
이제 이들을 사용해 보겠습니다:
#include <iostream>
using namespace cout;
int main() {
int a = 10;
int* ptr = &a;
cout << "Size of int: " << sizeof(int) << " bytes" << endl;
cout << "Value of a: " << a << endl;
cout << "Address of a: " << &a << endl;
cout << "Value pointed by ptr: " << *ptr << endl;
int b = (a > 5) ? 1 : 0;
cout << "b = " << b << endl;
return 0;
}
이 마법의 주문에서 우리는 sizeof를 사용하여 int의 크기를 구하고, &를 사용하여 a의 주소를 얻고, *를 사용하여 포인터 ptr가 가리키는 값을 출력하고, 삼항 연산자 ?:를 사용하여 조건부 표현식을 계산합니다.
연산자 우선순위
C++의 연산자는 우선순위를 가지고 있습니다. 이는 수학과 마찬가지로 연산이 수행되는 순서를 결정합니다. 마법 대결의 규칙들처럼!
다음은 연산자 우선순위의 간단한 표입니다 (가장 높은 우선순위부터):
| 우선순위 | 연산자 |
|---|---|
| 1 | :: |
| 2 | () [] -> . ++ -- |
| 3 | ! ~ ++ -- + - * & (type) sizeof |
| 4 | * / % |
| 5 | + - |
| 6 | << >> |
| 7 | < <= > >= |
| 8 | == != |
| 9 | & |
| 10 | ^ |
| 11 | | |
| 12 | && |
| 13 | || |
| 14 | ?: |
| 15 | = += -= *= /= %= >>= <<= &= ^= |= |
| 16 | , |
기억하시기 어렵다면 괄호를 사용하여 명확하게 순서를 지정할 수 있습니다.
그리고 여러분, 젊은 마법사 여러분! C++ 연산자의 첫 번째 수업을 마친 것을 축하합니다. 연습이 완벽함을 기억하십시오, 그러면 복잡한 프로그램을 쉽게 만들 수 있을 것입니다. 행복하게 코딩하시고, 컴파일 오류가 적고 멀리 떨어지기를 바랍니다!
Credits: Image by storyset
