연산자 (Operator)
변수를 선언하는 방법을 통해 HP 등 다양한 정보들을 만들었으니 이번에는 그 값을 어떻게 조작할지 알아보겠습니다.
산술 연산자 (이항 연산자)
덧샘, 뺄샘, 곱샘, 나눗샘 그리고 나머지 연산으로 값에 변화를 주는 연산자입니다.
+ (더하기)
cout << 5 + 3 << endl; // 8, 둘을 더한 결과 출력
int a = 10, int b = 20;
cout << a + b << endl; // 30, 둘을 더한 결과 출력
위 코드에서는 각각 숫자와 변수를 더하기 연산하여 8과 30이 출력됩니다.
- (빼기)
cout << a - b << endl; // -10, 둘을 뺀 결과 출력
위 코드에서는 a와 b를 빼서 -10이 출력됩니다.
* (곱하기)
cout << a * b << endl; // 200, 둘을 곱한 결과를 출력
위 코드에서는 a와 b를 곱해서 200이 출력됩니다.
/ (나누기)
cout << 5 / 3 << endl; // 1, 5와 3이 int라 결과도 int를 출력
cout << 5.f / 3.f << endl; 1.66667, 5와 3을 나눈 값에 float이라 소숫점도 출력
위 코드에서는 5와 3을 나누어 각각 int의 경우 1, float의 경우 1.66667을 출력합니다.
% (나머지 연산)
cout << 5 % 3 << endl; // 2, 5와 3을 나눈 나머지 2를 출력
나누기, 나머지 연산을 할 때 주의할 점
cout << 5 / 0 << endl; // X
cout << 5.f / 0.f << endl; // X
cout << 5 % 0 << endl; // X
어떤 int 값을 0으로 나누는 행위를 할 경우 프로그램에서 에러를 발생합니다!
그냥 위와 같이 코드로 작성할 경우엔 컴파일러가 에러를 발생시켜줍니다.
하지만 프로그램 실행중 특정 값이 0이 되어 나누는 경우 2번째 화면처럼 프로그램이 중단되고 에러가 발생합니다.
이러한 경우도 발생할 수 있으니 잘 알아둡니다.
= (대입 연산자, 할당 연산자)
변수 초기화때 한번 본 값을 대입 또는 할당하는 연산자입니다.
int a = 10; // a에 10을 할당
int b;
b = 10 // b에 10을 대입
대입 연산자는 다음과 같이 사용할 수 있습니다.
int a, b, c;
a = b = c = 10; // 10 → c → b → a 순으로 대입.
대입 연산은 위와 같이 연속으로 이어질 때 우측(오른쪽)에서 부터 좌측(왼쪽)으로 진행됩니다.
c에 10이 대입되고 b에 c가 대입, a에 b가 대입됩니다.
관계 연산자
두 피연산자의 관계를 따져서 참 또는 거짓 논리를 반환하는 연산자입니다.
( ) 괄호로 감싸줘야 제대로 된 값을 받아서 출력할 수 있다.
몇 가지 예제만 보겠습니다.
<, >
int a = 10, b = 20;
cout << (a < b) << endl; // 1, true
cout << (a > b) << endl; // 0, false
a < b: a가 b보다 작은가?
a > b: a가 b보다 큰가?
<=, >=
int a = 10, b = 20, c = 20;
cout << (a <= b) << endl; // 1, true
cout << (b >= c) << endl; // 1, true
a <= b: a가 b보다 작거나 같은가?
b >= c: b가 c보다 크거나 같은가?
==, !=
int a = 10, b = 20, c = 20;
cout << (a == b) << endl; // 0, false
cout << (b != c) << endl; // 0, false
a == b: a가 b와 같은가?
b != c: b가 c와 다른가?
논리 연산자
피연산자를 논리(참 or 거짓)로 받아 최종 관계를 참 또는 거짓을 반환하는 연산자입니다.
&&, ||, !
int a = 10, b = 20, c = 20;
cout << (a < b && b == c) << endl; // 1, true
cout << (a != b || a == c) << endl; // 0, false
cout << !(a == b) << end; // 1, true
a < b && b == c: a는 b보다 작으면서 b는 c와 같은가? (a and b)
논리들이 동시에 만족하는가? 앞의 결과 확인, 이때 만족하지 않느면 바로 false를 반환 후 연산이 끝납니다.
a != b || a == c: a는 b와 다르거나 또는 a는 c와 같은가? (a or b)
논리 중 하나라도 만족하는가? 앞의 결과 확인, 만족하는 경우 바로 true 반환 후 연산이 끝납니다.
!(a == b): a와 b는 같은가?의 반대
논리의 반대되는 값을 반환합니다.
sizeof 연산자
피연산자의 메모리 크기를 Byte 단위로 반환하는 연산자입니다.
int a = 0;
cout << sizeof(a) << endl; // 4
cout << sizeof(short) << endl; // 2
변수 a의 크기 4를 출력하는 코드와 short 타입의 크기 2를 출력하는 코드입니다.
어떤 피연산자(변수, 타입, 객체 등)의 메모리 크기를 알고 싶을 때 활용할 수 있습니다.
상수 (Constant)
변수는 프로그램 실행중 데이터 변할 수 있는 가변적인 데이터였습니다.
상수는 한번 저장된 데이터는 변하지 않는 고정적인 데이터입니다.
지금까지 작성한 코드에서 상수
cout << "Hello World" << endl;
cout << 5 + 3 << endl;
위와 같이 코드에 특정값들을 작성한 코드는 리터럴 상수라는 임시 상수가 생성된다.
상수 = ("Hello World", 5, 3)
리터럴 상수(literal)
리터럴 상수는 이름이 없는 메모리 공간에 임시로 생성되는 상수입니다.
int Num = 10 + 20;
위 코드에서 메모리가 어떤 식으로 흐르는지 보겠습니다.
위 그림에서 프로그램이 실행되면 사용하는 메모리 영역 중 2가지인 Stack 영역과 Data 영역의 표기를 해두었습니다.
자세한 내용은 뒤에서 다룰 예정이며 우선 그러한 공간이 있다는 것만 알아두고 진행하겠습니다.
- 10과 20의 값을 가진 리터럴 상수를 Data 영역의 특정 공간에 생성합니다.
- Data 영역의 특정 공간에 10과 20을 더한 30의 값을 가진 리터럴 상수를 생성합니다.
- Data 영역에서 Stack 영역의 num이라고 할당된 메모리 공간에 대입해줍니다.
- 임시로 사용한 Data 영역의 메모리는 해제됩니다.
상수화 변수 (const 키워드)
const 키워드를 사용하여 변수를 고정된 값인 상수로 선언할 수 있다.
const int Num = 10; // 상수는 선언과 동시에 초기화
Num = 20 // X, Error 발생!
const 키워드를 사용한 상수화 변수는 선언과 동시에 초기화해야한다. 초기화 하지 않으면 에러가 발생한다.
상수화 변수는 값을 변경할 수 없기 때문에 2번째줄 코드와 같이 변경을 시도하면 에러가 발생한다.
혼자 해보기
1) 위 화면과 같이 입력을 받고 출력을 하는 프로그램을 작성하세요.
전투력은 Hp, Atk, Def를 모두 더한 후 평균을 낸 값입니다.
이전편
2021.07.10 - [밑바닥부터 시작하는 게임 개발/C++] - [밑바닥 C++] 2. HP 표기 등을 위한 변수
다음편
2021.07.17 - [밑바닥부터 시작하는 게임 개발/C++] - [밑바닥 C++] 4. 컴퓨터 친화적인 비트 연산자 + 축약, 증감 연산자
'밑바닥부터 시작하는 게임 개발 > C++' 카테고리의 다른 글
[밑바닥 C++] 5. 가위바위보 게임으로 알아보는 분기문(if) (0) | 2021.08.16 |
---|---|
[밑바닥 C++] 4. 컴퓨터 친화적인 비트 연산자 + 축약, 증감 연산자 (2) | 2021.07.17 |
[밑바닥 C++] 2. HP 표기 등을 위한 변수 (0) | 2021.07.10 |
[밑바닥 C++] 1. 역시 시작은 Hello World (0) | 2021.07.04 |
[밑바닥 C++] 0. C++를 시작하며 (0) | 2021.07.04 |
댓글