C++ 연산자: 프로그래밍 마법의 관문

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

C++ Operators

연산자란 무엇인가요?

들어가기 전에 연산자가 무엇인지 이해해 보겠습니다. 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;
}

이 마법의 프로그램에서 우리는 ab를 다양한 관계 연산자로 비교하고 있습니다. 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