[C++] 변수의 유효범위, 연산 우선순위, 타입 변환, 사칙연산 주의사항
변수의 유효범위, 연산 우선순위, 타입 변환, 사칙연산 주의사항
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
변수의 유효범위
전역 변수
// int hp = 10;
스택
{ } 중괄호의 범위가 생존 범위
같은 이름 두 번 사용할 때 문제
연산 우선순위
짝수 여부
- bool isEven = (hp % 2 == 0);
- bool isEven = ((hp % 2) == 0);
- 둘은 같다. 하지만 가독성이나 연산 우선순위를 걱정하지 않기 위해 아래 같은 형식으로 적는 습관을 들이자.
짝수거나 3으로 나뉘는 값인지 확인
- bool isEvenOrDivBy3 = (hp % 2 == 0 || hp % 3 == 0);
- bool isEvenOrDivBy3 = ((hp % 2) == 0 || (hp % 3) == 0);
- 둘은 같다. 하지만 가독성이나 연산 우선순위를 걱정하지 않기 위해 아래 같은 형식으로 적는 습관을 들이자.
우선순위 | 연산자 | 설명 | 결합 방향 |
1 | :: | 범위 지정 연산자 | - |
2 | ++ | 후위 증가 연산자 | 왼쪽에서 오른쪽으로 |
-- | 후위 감소 연산자 | 왼쪽에서 오른쪽으로 | |
() | 함수 호출 | 왼쪽에서 오른쪽으로 | |
[] | 첨자 연산자 | 왼쪽에서 오른쪽으로 | |
. | 멤버 연산자 | 왼쪽에서 오른쪽으로 | |
-> | 멤버 접근 연산자 | 왼쪽에서 오른쪽으로 | |
typeid | 타입 인식 | 왼쪽에서 오른쪽으로 | |
const_cast | 상수 타입 변환 | 왼쪽에서 오른쪽으로 | |
dynamic_cast | 동적 타입 변환 | 왼쪽에서 오른쪽으로 | |
reinterpret_cast | 재해석 타입 변환 | 왼쪽에서 오른쪽으로 | |
static_cast | 정적 타입 변환 | 왼쪽에서 오른쪽으로 | |
3 | ! | 논리 NOT 연산자 | 오른쪽에서 왼쪽으로 |
~ | 비트 NOT 연산자 | 오른쪽에서 왼쪽으로 | |
+ | 양의 부호 (단항 연산자) | 오른쪽에서 왼쪽으로 | |
- | 음의 부호 (단항 연산자) | 오른쪽에서 왼쪽으로 | |
++ | 전위 증가 연산자 | 오른쪽에서 왼쪽으로 | |
-- | 전위 감소 연산자 | 오른쪽에서 왼쪽으로 | |
(타입) | 타입 캐스트 연산자 | 오른쪽에서 왼쪽으로 | |
* | 참조 연산자 (단항 연산자) | 오른쪽에서 왼쪽으로 | |
& | 주소 연산자 (단항 연산자) | 오른쪽에서 왼쪽으로 | |
sizeof | 크기 연산자 | 오른쪽에서 왼쪽으로 | |
new | 객체 생성 | 오른쪽에서 왼쪽으로 | |
delete | 객체 제거 | 오른쪽에서 왼쪽으로 | |
4 | .* | 멤버 포인터 연산자 | 왼쪽에서 오른쪽으로 |
->* | 참조 멤버 포인터 연산자 | 왼쪽에서 오른쪽으로 | |
5 | * | 곱셈 연산자 | 왼쪽에서 오른쪽으로 |
/ | 나눗셈 연산자 | 왼쪽에서 오른쪽으로 | |
% | 나머지 연산자 | 왼쪽에서 오른쪽으로 | |
6 | + | 덧셈 연산자 (이항 연산자) | 왼쪽에서 오른쪽으로 |
- | 뺄셈 연산자 (이항 연산자) | 왼쪽에서 오른쪽으로 | |
7 | << | 비트 왼쪽 시프트 연산자 | 왼쪽에서 오른쪽으로 |
>> | 부호 비트를 확장하면서 비트 오른쪽 시프트 | 왼쪽에서 오른쪽으로 | |
8 | < | 관계 연산자(보다 작은) | 왼쪽에서 오른쪽으로 |
<= | 관계 연산자(보다 작거나 같은) | 왼쪽에서 오른쪽으로 | |
> | 관계 연산자(보다 큰) | 왼쪽에서 오른쪽으로 | |
>= | 관계 연산자(보다 크거나 같은) | 왼쪽에서 오른쪽으로 | |
9 | == | 관계 연산자(와 같은) | 왼쪽에서 오른쪽으로 |
!= | 관계 연산자(와 같지 않은) | 왼쪽에서 오른쪽으로 | |
10 | & | 비트 AND 연산자 | 왼쪽에서 오른쪽으로 |
11 | ^ | 비트 XOR 연산자 | 왼쪽에서 오른쪽으로 |
12 | | | 비트 OR 연산자 | 왼쪽에서 오른쪽으로 |
13 | && | 논리 AND 연산자 | 왼쪽에서 오른쪽으로 |
14 | || | 논리 OR 연산자 | 왼쪽에서 오른쪽으로 |
15 | ? : | 삼항 조건 연산자 | 오른쪽에서 왼쪽으로 |
16 | = | 대입 연산자 및 복합 대입 연산자 (=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=) |
오른쪽에서 왼쪽으로 |
17 | throw | 예외 발생 | 왼쪽에서 오른쪽으로 |
18 | , | 쉼표 연산자 | 왼쪽에서 오른쪽으로 |
타입 변환
int hp = 77777;
short hp2 = (short)hp; //바구니 교체
int는 32bit(=4Byte), short는16bit(=2Byte)
short로 옮기면서 윗쪽 비트데이터가 짤린 상태로 저장된다. 위쪽 비트데이터가 분실된다.
전체 코드
더보기
#include <iostream>
using namespace std;
// 1. 변수의 유효범위
// 전역 변수
// int hp = 10;
// 스택
// { } 중괄호의 범위가 생존 범위
// 같은 이름 두 번 사용할 때 문제
// 2) 연산 우선순위
// 짝수 여부
// bool isEven = ((hp % 2) == 0);
// 짝수거나 3으로 나뉘는 값인지 확인
// bool isEvenOrDivBy3 = ((hp % 2) == 0 || (hp % 3) == 0);
// 3) 타입 변환
// 4) 사칙 연산 관련
int main()
{
{
int hp = 10;
cout << hp << endl;
}
int hp = 77777;
cout << hp << endl;
// 3) 타입변환
// 바구니 교체
short hp2 = (short)hp; // 바구니 사이즈가 줄어들어 다 담을 수 없으면 윗쪽 비트 데이터가 짤린 상태로 저장된다. 큰 데이터에서 작은 데이터로 옮길 때는 유의해야 한다
cout << hp2 << endl;
float hp3 = (float)hp; // 실수로 변환할 때 정밀도 차이가 있기 때문에 데이터 손실
cout << hp3 << endl;
unsigned int hp4 = (unsigned int)hp; // 비트 단위로 보면 똑같은데, 분석하는 방법이 달려진다.
cout << hp4 << endl;
// 곱셈
// - 오버플로우
// int * int = int // 1241241 * 12414212414 // int 곱셈으로 int의 범위를 넘어서는 큰 값이 되는 경우가 종종 발생한다.
// __int64 * int // 값이 크면 __int64 를 넣는 방식으로 처리가 가능하다
// 나눗셈
// - 0 나누기 조심
int maxHp1 = 0;
// float ratio = hp / maxHp1; // 이 경우 크러쉬가 난다
// 실수 관련
int maxHp2 = 100000;
float ratio2 = hp / maxHp2; // 0.77777 정수 기준이기 때문에 값이 정수값 0으로 처리된다.
cout << ratio2 << endl;
float maxHp3 = 100000;
float ratio3 = hp / maxHp3; // 0.77777로 출력
cout << ratio3 << endl;
}
'⭐ Programming > C++' 카테고리의 다른 글
[C++] while, for 반복문 (0) | 2022.03.20 |
---|---|
[C++] if, if-else, else, switch 분기문 (0) | 2022.03.20 |
[C++] const, 메모리 구조 (0) | 2022.03.19 |
[C++] 비트 연산과 비트 플래그, 비트 시프 (0) | 2022.03.19 |
[C++] 비교 연산과 논리 연산 (0) | 2022.03.19 |
댓글
이 글 공유하기
다른 글
-
[C++] while, for 반복문
[C++] while, for 반복문
2022.03.20 -
[C++] if, if-else, else, switch 분기문
[C++] if, if-else, else, switch 분기문
2022.03.20 -
[C++] const, 메모리 구조
[C++] const, 메모리 구조
2022.03.19 -
[C++] 비트 연산과 비트 플래그, 비트 시프
[C++] 비트 연산과 비트 플래그, 비트 시프
2022.03.19