[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
댓글을 사용할 수 없습니다.