경일게임아카데미 멀티 디바이스 메타버스 플랫폼 개발자 양성과정 정리 3. C++의 연산자

Jinho Lee·2022년 4월 20일

3. C++의 연산자

컴퓨터(computer)란 기본적으로 계산(compute)하는 기계이며, 이를 현대적인 의미로 표현하자면 명령어들의 리스트에 따라 데이터를 처리하는 기계라고 할 수 있다. 여기서 데이터는 계산(연산)을 통해 처리, 가공된다. 그렇다면 이러한 작업을 명령할 명령어가 필요할 것이다.
여기서 데이터를 가공(연산)하는 모든 명령에 필요한 것들연산자라고 한다.
그럼 이제부터 연산자는 어떤 종류가 있는지, 그 계산의 우선 순위와 결합 순서를 묶어서 설명하고자 한다.

  • 여기에 서술한 연산자가 모든 연산자는 아니다. 후에 진도가 나가고 나면 배운 내용을 추가할 예정이다.

1. 산술연산자 (사칙연산) - 좌측부터 연산

1) + : 더하기 ex) 11 + 3 => 14

2) - : 빼기 ex) 11 - 3 => 8

3) * : 곱하기 ex) 11 * 3 => 33

4) / : 나누기 ex) 11 / 3 => 3

  • 주의 : 0으로 나누면 Runtime Error가 일어난다

5) % : 나머지(모듈러) 11 % 3 => 2

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

예시

	int left_value = 11 + 3;
	int right_value = 3;

	std::cout << "+ : " << left_value + right_value << std::endl;	// 17
	std::cout << "- : " << left_value - right_value << std::endl;	// 11
	std::cout << "* : " << left_value * right_value << std::endl;	// 42
	std::cout << "/ : " << left_value / right_value << std::endl;	// 4	// right_value = 0 -> Runtime Error
	std::cout << "% : " << left_value % right_value << std::endl;	// 2

2. 대입연산자 - 우측부터 연산

= : 왼쪽 항에 오른쪽 항의 값을 대입한다. 복사한다.

3. 복합대입연산자 - 우측부터 연산

왼쪽 항에 오른쪽 항의 값을 계산 후 대입, 복사한다.

1) += : a += b; => a = a + b;

2) -= : a -= b; => a = a - b;

3) *= : a *= b; => a = a * b;

4) /= : a /= b; => a = a / b;

5) %= : a %= b; => a = a % b; -> 주의: a와 b는 정수형 타입이어야 한다.

  • 2, 3과 같은 대입연산자를 사용하면 변수의 값을 바꿀 수 있다.
  • 계산식이어도 괄호로 묶어주면 괄호 안에서 연산이 종료되기에, 출력이 가능하다.
  • 출력은 left_value(계산 결과)

예시

	std::cout << left_value << " += " << right_value << ", left_value => ";
	left_value += right_value;	
	std::cout << left_value << std::endl;	// 17
	//left_value = 14;

	std::cout << left_value << " -= " << right_value << ", left_value => ";
	left_value -= right_value;
	std::cout << left_value << std::endl;	// 14
	//left_value = 14;

	std::cout << left_value << " *= " << right_value << ", left_value => ";
	left_value *= right_value;
	std::cout << left_value << std::endl;	// 42
	//left_value = 14;

	std::cout << left_value << " /= " << right_value << ", left_value => ";
	left_value /= right_value;
	std::cout << left_value << std::endl;	// 14
	//left_value = 14;

	std::cout << left_value << " %= " << right_value << ", left_value => ";
	left_value %= right_value;
	std::cout << left_value << std::endl;	// 2
	//left_value = 14;

	// 특수 : 아래처럼 계산식이어도 괄호로 묶어주면 괄호 안에서 연산이 종료되기에, 출력이 가능하다. 출력은 left_value(계산 결과)
	std::cout << (left_value += right_value) << std::endl;	// 5

4. 증감연산자

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

예시

  	left_value++; // 6
	++left_value; // 7

	left_value--; // 6
	--left_value; // 5

	std::cout << left_value++ << std::endl;	// 출력 : 5, 메모리 : 6	// 주의 : 증감연산은 cout이 수행되고 수행된다.
	std::cout << ++left_value << std::endl;	// 출력 : 7, 메모리 : 7

	std::cout << left_value-- << std::endl;	// 출력 : 7, 메모리 : 6
	std::cout << --left_value << std::endl;	// 출력 : 5, 메모리 : 5
  • 주의 1 : 증감연산은 cout이 수행되고 수행된다.
  • 주의 2
 int input_key = 10;
 std::cout << input_key << input_key++ << std::endl; // 예상 : 1011 결과값 : 1110
 std::cout << input_key++ << input_key++ << std::endl; // 예상 : 1112 결과값 : 1211
 std::cout << input_key++ << input_key << std::endl; // 예상 : 1314 결과값 : 1314
  • 이유 : cout이 블랙박스 상태 => 수의 순서가 바뀌는 이유가 불명, 따라서 증감연산을 두 번 이어서 하는 것은 추천하지 못한다고 한다.

5. 관계연산자

두 값을 비교한 결과가 참(1, 0 이외의 모든 수, true)인지 거짓(0, false)인지 반환하는 연산자이다.

1) < : 왼쪽 항의 값이 오른쪽 항의 값보다 작으면 참을 반환한다.

2) > : 왼쪽 항의 값이 오른쪽 항의 값보다 크면 참을 반환한다.

3) <= : 왼쪽 항의 값이 오른쪽 항의 값보다 작거나 같으면 참을 반환한다.

4) >= : 왼쪽 항의 값이 오른쪽 항의 값보다 크거나 같으면 참을 반환한다.

5) == : 왼쪽 항의 값과 오른쪽 항의 값이 같을 때 참을 반환한다.

6) != : 왼쪽 항의 값과 오른쪽 항의 값이 다를 때 참을 반환한다.

  • C++에서의 true/false 직접 출력하기 위해서는, cout에서 출력할 변수의 앞에 [ boolalpha << ]를 적어 출력한다.

예시

  	int left_value = 5;
    int right_value = 6;
    left_value < right_value; // 1
    left_value > right_value; // 0
    left_value <= right_value; // 1
    left_value >= right_value; // 0
    left_value == right_value; // 0
    left_value != right_value; // 1
	
	std::cout << boolalpha << (left_value < right_value) << std::endl;	// true

6. 논리연산자

왼쪽 항과 오른쪽 항의 값을 각각 참과 거짓으로 연산해서 두 값을 비교하여 참과 거짓을 반환하는 연산자이다.

1) && : 논리곱(AND)

  • a && b : a의 결과값이 참이고 b의 결과값이 참이면 1을 반환

2) || : 논리합(OR)

  • a || b : a의 결과값이 참이거나 b의 결과값이 참이면 1을 반환

3) ! : 논리부정(NOT)

  • !a : a의 결과값이 참이면 거짓을 반환, 거짓이면 참을 반환

예시

  	int left_value = 5;
    int right_value = 6;
    left_value < right_value && left_value <= right_value; // 1 && 1 => 1
    left_value < right_value && left_value >= right_value; // 1 && 0 => 0
    left_value < right_value || left_value <= right_value; // 1 || 1 => 1
    left_value < right_value && left_value <= right_value; // 1 || 0 => 1
    !(left_value < right_value) // !1 => 0

7. 삼항연산자

a ? b : c;

  • a의 결과값이 참이면 b실행문이 동작, 거짓이면 c실행문이 동작하는 연산자이다. 후에 나올 if문과 비슷하다.

예시

  	int left_value = 5;
    int right_value = 6;
    left_value < right_value ? std::cout << "true" : std::cout << "false"; // true

0개의 댓글