int, 4byte짜리 정수
4byte짜리 정수를 사용할 때 쓰임
표현 범위는 -2147483648 ~ 2147483647
쉽게 말해서 -21억 ~ 21억이라 생각하자.
내가 C++을 복습하는 이유는 코테를 준비하고 있기 때문이다.
그래서 문제를 푸는 코드에 들어가있는 값들의 예상값이 20억을 넘어가면 int가 아닌 long long을 써야 한다.
아 참고로
2147483647은 2^31 - 1이다.
또한 문제를 풀 때에는 이상한 문제가 아니라면 int의 최대값으로 20억까지가 아닌 987654321 또는 1e9를 쓴다.
const int INF = 987654321;
const int INF2 = 1e9;
왜냐하면 이 최대치를 기반으로 오버플로우를 방지할 수 있는 장점이 있기 때문이다.
int 연산
int로 선언한 변수 끼리 연산을 하게 되었을 때,
실수가 나온다면 소수점 아래에 있는 수는 모두 버림이 된다.
#include <iostream>
using namespace std;
int main()
{
int a = 3;
int b = 2;
cout << a / b << '\n'; // 1
double c = 3;
double d = 2;
cout << c / d << '\n'; // 1.5
}
int 타입끼리만 버리지, 앞의 코드처럼 double 타입은 버림없이 1.5가 나오는 것을 알 수 있다.
const 키워드
const 키워드는 수정할 수 없는 변수이다.
이정도는 알고 있다.
나도다.
보통 최대치나 방향 벡터를 나타내는 dir_y, dir_x에 const를 쓴다.
예를 들어 맵의 크기가 100 * 100이기 때문에 100 * 100 2차원 배열을 만들어야 하는 경우가 있다.
이 경우 이런식으로 사용하는 것이 좋다.
const int MAX = 100;
int a[MAX][MAX];
어차피 100이라는 숫자는 변하지 않는 상수다.
"미리" 설정해놓고 이를 기반으로 맵의 크기를 설정하는 것이다.
이렇게 하면 갑자기 a[100][10]이라는 실수를 방지할 수 있는 것이다.
매개변수 수정방지도 가능하다.
#include <iostream>
using namespace std;
void printConstRef(const int& x)
{
// x = 100; <- 이렇게 const로 받아온 매개변수값은 실제로 x를 참조하면서 바꿀 수 없게 방지한다.
cout << x;
}
int main()
{
int x = 10;
printConstRef(x);
return 0;
}
다음과 같이 범위기반 for반복문에 넣었을 때 상수로 만드는 기능을 한다. 이 때 value를 수정하면 에러가 발생한다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec = {10, 20, 30, 40, 50};
for (const int& value : vec)
{
cout << value << " ";
// value = 100; 에러발생
}
return 0;
}
이 또한 반복문에서 const로 사용하는 value값을 변경하면 에러가 뜬다.