그냥 게임개발자

int, 4byte짜리 정수 본문

C++ 나만의 복습

int, 4byte짜리 정수

sudoju 2024. 4. 4. 00:52

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값을 변경하면 에러가 뜬다.

'C++ 나만의 복습' 카테고리의 다른 글

long long  (0) 2024.04.04
오버플로, 언더플로  (0) 2024.04.04
bool, 참과 거짓  (0) 2024.04.04
stoi()  (0) 2024.04.04
atoi(s.c_str())??  (0) 2024.04.04