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