C++
C++ 기초(변수와 연산자)
hellowhales
2023. 1. 19. 18:45
728x90
변수는 수학에서와 같이 어떤 임의값을 담을 수 있는 역할을 한다. 각 블록 안에서 변수는 선언한 줄 다음부터 어디에서나 접근될 수 있다. 변수는 선언되면서 초기화될 수 있고 초기화되지 않을 수도 있다. 초기화되지 않을 시에 선언할 시 점의 메모리 값을 기반으로 무작위 값이 대입될 수 있는데, 이로 인해 버그가 발생할 수 있다.
int uninitializedInt; // 초기화하지 않고 선언
int initializedInt = 7 // 선언과 동시에 초기화
다음은 자주 사용되는 변수 타입들이다.
타입
|
설명
|
예
|
(signed) int
signed |
부호가 있는 정수
값의 범위는 컴파일러마다 다르나 대부분 4바이트 |
int i = 1;
signed int i = -8; signed i = 5; |
(signed) short (int)
|
작은 범위의 정수(대부분 2바이트)
|
short s =13;
|
(signed) long (int)
|
큰 범위의 정수 (대부분 4바이트)
|
long l =-7L;
|
(signed) long long (int)
|
아주 큰범위의 정수
범위는 컴파일러마다 다르나 최소한 long보다 크다(주로 8바이트) |
long long ll = 14LL;
|
unsigned (int)
unsigned short (int) unsigned long (int) unsigned long long (int) |
위의 각 정수 타입의 범위를 >=0으로 제한(음이 아닌 정수)
|
unsigned int i =2U;
unsigned short s= 23U; unsigned long l = 5400UL; unsigned long long ll = 14ULL; |
float
|
단정도 부동소수점수
|
float f = 7.2f;
|
double
|
배정도 부동소수점수. 정밀도가 최소한 float보다 크다
|
double d= 7.2;
|
long double
|
롱배정도 부종소수점수.
정밀도가 최소한 double보다 크다 |
long double d= 16.98L;
|
char
|
단일 문자
|
char ch = 'm';
|
char16_t
|
16비트 단일 문자
|
char16_t c16 = u'm';
|
char32_t
|
32비트 단일 문자
|
char32_t c32 = U'm';
|
wchar_t
|
단일 확장 문자
|
wchar_t w = L'm';
|
bool
|
부울 타입 true나 false 중 하나의 값을 가진다.
|
bool b = true;
|
std::byte
|
한 바이트를 표현한다.
|
std::byte b{42};
|
연산자는 보통 변수값을 변경하기 위해 사용되고 단항, 이항, 삼항 연산자로 분류할 수 있다.
연산자
|
설명
|
예
|
=
|
오른쪽 값을 왼쪽에 대입하는 이항 연산자
|
int i = 3;
|
!
|
표현식의 참/거짓을 반전시키는 단항 연산자
|
bool b = !true;// b = false
|
+, -, *, /
|
사칙연산을 해주는 이항 연산자
|
int i = 3 + 7;
int j = 6 - 1; int k = i * j; int w = i / j; |
%
|
나눗셈의 나머지를 계산하는 이항 연산자(모듈로)
|
int remainder = 5 %2; // 1
|
++
|
표현식에 1을 더하는 단항 연산자. 표현식의 앞에 나오냐 뒤에 나오냐에 따라 사전 증가와 사후 증가가 된다.
사전 증가면 표현식 결과에 1이 증가된 값이 반영되고 사후 증가면 표현식 결과에 현재값이 반영된 뒤 1을 증가 시킨다. |
i++;
++i |
--
|
위와 마찬가지로 표현식에 1을 빼주는 단항 연산자.
마찬가지로 사전 감소와 사후 감소로 나뉜다. |
i--;
--i; |
+=
-= *= /= %= |
각 문장의 축약형
i = i + j; i = i - j; i = i * j; i = i / j; i = i % j; |
i +=j;
i -= j; i *= j; i /= j; i %= j; |
&
&= |
양쪽에 나온 표현식끼리 비트 단위 AND 연산 수행
|
i = j & k;
i &= j; |
|(shift + \키)
|= |
양쪽에 나온 표현식끼리 비트 단위 OR 연산 수행
|
i = j | k;
j |= k; |
<<
>> <<= >>= |
왼쪽에 나온 표현식의 비트값을 오른쪽에 나온 수만큼 왼쪽(<<) 또는 오른쪽(>>) 으로 시프트(이동)한다.
|
i = i <<1;
i = i >>4; i <<=1; i >>=4; |
^
^= |
양쪽 표현식에 비트 단위 XOR 연산 수행
|
i =i ^ j;
i ^= j; |
여러 연산자가 복잡하게 뒤엉켜있는 코드의 경우 컴파일러는 정해진 순서에 따라 연산을 수행한다.
/, *, % >>>>> +, - >>>>> 비트 단위 연산 순으로 연산을 수행하며 우선 순위가 같을 시에는 왼쪽에서 오른쪽으로 연산을 수행한다. 평가 순서를 명확히 정해주기 위해서는 소괄호를 이용하면 된다.
C++는 논리 연산자가 들어가는 논리 표현식을 단락 논리short-circuit logic(축약 논리) 방식으로 평가한다. 이는 표현식을 평가하는 도중에 최종 결과가 확정되면 나머지 부분은 평가하지 않는다.
bool result = bool1 || bool2 || (i > 7) || (27 / 13 % i + 1) <2;
예를 들어 위와 같은 식이 있을 때 만약 bool1이 true라는 결과가 나오면 전체가 true일 수 밖에 없으므로 나머지 부분을 평가하지 않는다. 이는 만약 표현식의 끝에서 버그가 발생한다면 버그를 찾기 어렵게 만들 수 있다. 하지만 반대로 가볍게 검사할 수 있는 부분을 앞에 두고 시간이 오래걸리는 부분을 뒤로 두는 방법으로 성능을 향상시킬 수 있다.
728x90