4일차 - 연산자

연산자_
연산자란?
데이터를 가공(연산)하는 모든 명령에 필요한 것들
수많은 연산자들이 있고, 각각의 연산자들은 어떤 것 부터 연산하는지(우선순위)와 좌측 혹은 우측부터 연산하는지(결합순서)를 가진다.

 1. 사칙연산 : 산술연산자 (좌측부터 연산)
 + : 더하기
 - : 빼기
 * : 곱하기
 / : 나누기    11 / 3 = 3 (0으로 나누면 런타임 에러)
 % : 나머지    11 / 3 = 2
 ※값이 0일 경우에는 /,%는 출력되지 않음.(런타임 에러 - 0으로 나누거나 메모리 주소가 다르면 발생!)
 *, /, % > +, -
 

 
 
 
 int left_value = 14;
 int right_value = 3;
 
 cout << "+ : " << left_value + right_value << endl;
 cout << "- : " << left_value - right_value << endl;
 cout << "* : " << left_value * right_value << endl;
 cout << "/ : " << left_value / right_value << endl;
 cout << "% : " << left_value % right_value << endl;

-> 문제 없이 알맞은 값이 출력되었음.

 2. 대입연산자 (우측부터 연산)
 = : 왼쪽 항에 오른쪽 항의 값을 대입한다. (복사한다.)
 ex) testnum에 10을 대입하려면 -> int testnum = 10
 
 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; (a와 b는 정수형 타입이어야 한다.)
 
 
left_value += right_value;
cout << "+= : " << left_value << endl;
left_value -= right_value;
cout << "-= : " << left_value << endl;
left_value *= right_value;
cout << "*= : " << left_value << endl;
left_value /= right_value;
cout << "/= : " << left_value << endl;
※괄호로 묶어서 값을 산출해내는 방식도 가능함.
cout << "% : " << (left_value %= right_value) << endl;
 
※※cout에 들어가는 것은 값이어야 함. 복합대입연산자만으로는 값이 나오지 않음. 
left_value += right_value는 left_value에 대입됨.

 4. 증감연산자
 특정 변수의 값을 1씩 증가시키거나 감소시킬 때 사용한다.
 변수의 앞이나 뒤에 ++ / -- 를 붙여서 사용한다.

 left_value++; //15
 cout << left_value++ << endl;//실행이후 15가 됨. 출력 : 14, 메모리 : 15
  ++left_value;16
 cout << ++left_value << endl;// 메모리 : 16, 출력 : 16
 cout << left_value-- << endl;// 출력 : 16 메모리 : 15
 cout << --left_value << endl;// 출력 : 14 메모리 : 14
 
 -> 변수뒤에 오는 증감 연산자는 실행 이후 적용됨.


 5. 관계연산자
 두 값을 비교한 결과가 참(1, true)인지 거짓(0, false)인지 반환하는 연산자.

 < : a < b : 왼쪽 항의 값이 오른쪽 합의 값보다 작으면 참을 반환.
 > : a > b : 왼쪽 항의 값이 오른쪽 합의 값보다 크면 참을 반환.
 <= : a <= b : 왼쪽 항의 값이 오른쪽 합의 값보다 작거나 같으면 참을 반환.
 > : a >= b : 왼쪽 항의 값이 오른쪽 합의 값보다 크거나 같으면 참을 반환.
 == : 왼쪽 항의 값과 오른쪽 항의 값이 같으면 참을 반환.
 != : 왼쪽 항의 값과 오른쪽 항의 값이 같지 않으면 참을 반환.

-

     실습.
     1. 고객의 나이를 입력 받아서 미성년자(19세 이하)이면 true를 출력.
     성인이면 false를 출력.
     
     2. 입력 받은 나이를 기준으로, 주민등록증 발급대상(20세)이면 true, 아니면 false를 출력

     3. 입력 받은 나이가 아홉수인지 확인해서 true, false 출력

-
int customer_age;
int age = 10;
cin >> customer_age;
cout << (customer_age > 19) << endl;
cout << (customer_age == 20) << endl;
costomer_age %= age;
cout << (customer_age == 9) << endl;

어려웠던 점.

1) 요구사항을 정확히 파악하지 못해, 정확한 연산자를 활용하지 못했음.
ex) 19세 이하 -> 20세를 포함하여 customer_age < 19로 활용

2) boolalpha를 이용하지 않아 true, false 값을 0과 1로만 표현함.
※ boolalpha 0과1로 된 true, false 값을 true, false 로 표현해줌.

3) 아홉수의 나이를 표현하는 데에 어려움을 겪음. %를 사용해야 한다는 결과 도출에 많은 시간이 소요됨.

-수정

int customer_age;

cout << "고객의 나이를 입력하세요 : ";
cin >> customer_age;

cout << boolalpha; // 1 or 0 인 true false 값을 true false로 바꿔줌! 
cout << "고객님은 미성년자 " << (customer_age <= 19) << "입니다." << endl;
cout << "고객님은 주민등록발급대상 " << (customer_age == 20) << "입니다." << endl;
cout << "고객님은 아홉수 " << ((customer_age % 10) == 9) << "입니다." << endl;

->
1) boolalpha를 사용하여 0과 1이 아닌 true, false로 출력됨.

2) 잘못 사용된 관계연산자를 알맞게 수정함.

이외에도 많은 연산자가 존재한다.

4일차까지 변수,데이터타입, 그리고 연산자 등 많은 것을 배웠는데, 앞으로 잘 활용할 수 있도록 연습을 멈추지 말아야 한다!

좋은 웹페이지 즐겨찾기