본문 바로가기
C++

C++ 기초(2): 연산자 (22.04.07)

by Luden59 2022. 4. 11.

<연산자>

  • 데이터를 가공(연산)하는 모든 명령에 필요한 것들
    • 어떤 종류의 연산자가 있는지
    • 우선 순위: 어떤 순서로 연산이 진행되는지
    • 결합 순서: 좌측부터 연산하는 연산자, 우측부터 연산하는 연산자

 


연산자의 종류

  1. 산술연산자
  2. 대입연산자
  3. 복합대입연산자
  4. 증감연산자
  5. 관계연산자

1. 산술 연산자

  • 사칙 연산을 할때 사용하는 연산자
  • 좌측부터 연산한다.
연산자 설명
+ 더하기
- 빼기
* 곱하기
/ 나누기
% 나머지
//======사칙연산
    int left_value = 11;
    int right_value = 3; //3을 0으로 바꾸면, 런타임에러가 뜬다.(곱하기까지만 나옴)

    cout << "#산술연산자" << endl;
    cout << left_value << " + " << right_value << ": " << left_value + right_value << endl;
    cout << left_value << " - " << right_value << ": " << left_value - right_value << endl;
    cout << left_value << " * " << right_value << ": " << left_value * right_value << endl;
    cout << left_value << " / " << right_value << ": " << left_value / right_value << endl;
    cout << left_value << " % " << right_value << ": " << left_value % right_value << endl;

*/과 %은 오른쪽 항이 0일 경우 런타임 에러가 난다

*우선 순위: (*, /, %) > (+, -)

 

2. 대입 연산자

  • 왼쪽 항에 오른쪽 항의 값을 대입(복사)한다. (오른쪽에서 왼쪽으로)
연산자 설명
= 대입(복사)
//======대입 연산자
    int left_value1 = 11 + 3; //우측의 연산을 먼저하고, 왼쪽으로 복사한다.

* 우측의 연산을 먼저하고, 왼쪽으로 복사한다.

* 값을 변경하기 위해 사용.

 

3. 복합대입연산자

  • 산술 연산자 + 대입 연산자 느낌...
연산자 설명 예시
+= 오른쪽 값을 왼쪽 값에 더한 값을 왼쪽 값에 대입하기 a += b;
>> a = a + b;
-= 오른쪽 값을 왼쪽 값에 뺀 값을 왼쪽 값에 대입하기 a -= b;
>> a = a - b;
*= 오른쪽 값을 왼쪽 값에 곱한 값을 왼쪽 값에 대입하기 a *= b;
>> a = a * b;
/= 오른쪽 값을 왼쪽 값에 나눈 값을 왼쪽 값에 대입하기 a /= b;
>> a = a / b;
%= 오른쪽 값을 왼쪽 값에 나머지한 값을 왼쪽 값에 대입하기 a %= b;
>> a = a % b;
//======복합대입연산자
    int left_value2 = 11;
    int right_value2 = 3;

    cout << "\n#복합대입연산자" << endl;
    cout << "(left_value2) " << left_value2 << " += " << right_value2 << ", left_value2 => ";
    left_value2 += right_value2;
    cout << left_value2 << endl;

    cout << "(left_value2) " << left_value2 << " -= " << right_value2 << ", left_value2 => ";
    left_value2 -= right_value2;
    cout << left_value2 << endl;
    
    cout << "(left_value2) " << left_value2 << " *= " << right_value2 << ", left_value2 => ";
    left_value2 *= right_value2;
    cout << left_value2 << endl;
    
    cout << "(left_value2) " << left_value2 << " /= " << right_value2 << ", left_value2 => ";
    left_value2 /= right_value2;
    cout << left_value2 << endl;
    
    cout << "(left_value2) " << left_value2 << " %= " << right_value2 << ", left_value2 => ";
    left_value2 %= right_value2;
    cout << left_value2 << endl;

    left_value2 += 3 + 6;
    cout << left_value2 << endl;

*%=: a, b가 정수이면 문제가 없다. a,
b가 실수이면, 나머지 연산자가 동작하지 않는다.
기타 다른 형태일 경우 다양한 문제가 있을 수 있다.

 

4. 증감 연산자

  • 대입 연산자 없이 값을 변경할 수 있다.
  • 특정 변수의 값을 1씩 증가시키거나 감소시킬 때 사용한다.
  • 변수의 앞이나 뒤에 ++ / -- 를 붙여서 사용한다.
  • 변수 뒤에 붙은 경우, 다른 연산을 모두 한 후, 마지막에 연산이 진행된다.
    ex. cout<<num++<<endl; (출력은 num의 원래 값. 출력 후에는 num의 값이 1 추가된다.)

 

연산자 설명
num++ 해당 줄의 코드를 모두 실행 후, num에 1을 추가한 값을 저장
++num num에 1을 추가한 값을 저장 후, 해당 줄의 코드 실행
num-- 해당 줄의 코드를 모두 실행 후, num에 1을 뺀 값을 저장
--num num에 1을 뺀 값을 저장 후, 해당 줄의 코드 실행

>> 변수 앞에 증감 연산자가 붙은 경우, 다른 연산을 하기 전에 연산이 진행 된다.

int left_value3 = 11;
left_value3++; //left_value3 = left_value3 + 1 (12)
cout << "left_value3++(외부) : " << left_value3 << endl;
++left_value3; //left_value3 = left_value3 + 1 (13)
cout << "++left_value3(외부) : " << left_value3 << endl;

cout << "left_value3++(내부) : " << left_value3++ << endl; //출력: 13 메모리: 15
cout << "++left_value3(내부) : " << ++left_value3 << "\\n" << endl; //메모리: 16 출력: 16
int left_value3 = 11;
left_value3++; //left_value3 = left_value3 + 1 (12)
cout << "left_value3++(외부) : " << left_value3 << endl;
++left_value3; //left_value3 = left_value3 + 1 (13)
cout << "++left_value3(외부) : " << left_value3 << endl;

cout << "left_value3++(내부) : " << left_value3++ << endl; //출력: 13 메모리: 15
cout << "++left_value3(내부) : " << ++left_value3 << "\\n" << endl; //메모리: 16 출력: 16

 

5. 관계연산자

  • 두 값을 비교한 결과가 참인지 거짓인지 반환하는 연산자
  • 참은 0이 아닌 수나 true, 거짓은 0이나 false로 표시
연산자 설명 예시
< 왼쪽항의 값이 오른쪽항의 값보다 작다면 참을 반환. 아니면 거짓(크거나 같으면 거짓) a < b
> 왼쪽항의 값이 오른쪽항의 값보다 크다면 참을 반환. 아니면 거짓(작거나 같으면 거짓) a > b
<= 왼쪽항의 값이 오른쪽항의 값보다 작거나 같으면 참을 반환. 아니면 거짓(크면 거짓) a <= b
>= 왼쪽항의 값이 오른쪽항의 값보다 크거나 같으면 참을 반환. 아니면 거짓(작으면 거짓) a >= b
== 왼쪽항의 값이 오른쪽항의 값과 같으면 참을 반환. 아니면 거짓(크거나 작으면 거짓) a == b
!= 왼쪽항의 값과 오른쪽항의 값이 다르면 참을 반환. 아니면 거진(같으면 거짓) a != b
//실습1 (관계연산자)
    int age;
    cout << "\n===실습===" << endl;
    cout << "나이를 입력해주세요: ";
    cin >> age;

    cout << "\n결과>" << endl;
    //boolalpha: 0, 1을 true, false로 바꿔서 알려줌
    cout << "미성년자인가요? > \t\t" << boolalpha << (age <= 19) << endl;
    cout << "주민등록증 발급대상인가요? > \t" << (age == 20) << endl;
    cout << "아홉수인가요? > \t\t" << (age % 10 == 9) << endl;

(나이를 입력하면, 미성년자(19세 이하)인지, 주민등록 발급대상(20세)인지, 아홉수(끝자리가 9)인지 판별하여 true/false로 나타냄)

*boolalpha: 0, 1 등을 false, true로 변환해서 나타낸다.

*/과 %은 오른쪽 항이 0일 경우 런타임 에러가 난다

*우선 순위: (*, /, %) > (+, -)