컴퓨터(computer)란 기본적으로 계산(compute)하는 기계이며, 이를 현대적인 의미로 표현하자면 명령어들의 리스트에 따라 데이터를 처리하는 기계라고 할 수 있다. 여기서 데이터는 계산(연산)을 통해 처리, 가공된다. 그렇다면 이러한 작업을 명령할 명령어가 필요할 것이다.
여기서 데이터를 가공(연산)하는 모든 명령에 필요한 것들을 연산자라고 한다.
그럼 이제부터 연산자는 어떤 종류가 있는지, 그 계산의 우선 순위와 결합 순서를 묶어서 설명하고자 한다.
- 여기에 서술한 연산자가 모든 연산자는 아니다. 후에 진도가 나가고 나면 배운 내용을 추가할 예정이다.
1) + : 더하기 ex) 11 + 3 => 14
2) - : 빼기 ex) 11 - 3 => 8
3) * : 곱하기 ex) 11 * 3 => 33
4) / : 나누기 ex) 11 / 3 => 3
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
= : 왼쪽 항에 오른쪽 항의 값을 대입한다. 복사한다.
왼쪽 항에 오른쪽 항의 값을 계산 후 대입, 복사한다.
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
특정 변수의 값을 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이 블랙박스 상태 => 수의 순서가 바뀌는 이유가 불명, 따라서 증감연산을 두 번 이어서 하는 것은 추천하지 못한다고 한다.
두 값을 비교한 결과가 참(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
왼쪽 항과 오른쪽 항의 값을 각각 참과 거짓으로 연산해서 두 값을 비교하여 참과 거짓을 반환하는 연산자이다.
1) && : 논리곱(AND)
2) || : 논리합(OR)
3) ! : 논리부정(NOT)
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
a ? b : c;
int left_value = 5;
int right_value = 6;
left_value < right_value ? std::cout << "true" : std::cout << "false"; // true