목록분류 전체보기 (225)
그냥 게임개발자
오버플로우 흘럼넘친다라는 뜻이다. 컴퓨터에서는 어떤 타입의 허용범위를 넘으면 발생하는 에러를 오버플로우라고 한다. 예를 들어 signed int는 최대 Max치 허용범위는 2147483647이다. 21억4천7백4십8만3천6백4십7이다. 그렇다면 이 21억4천7백4십8만3천6백4십7을 벗어나는 숫자에 + 1을 하게되면 21억4천7백4십8만3천6백4십8이 아닌 - 21억4천7백4십8만3천6백4십8로 돌아가게 된다. 이를 예측할 수 없는 행동 즉 UB(Unexcpected Behavior)라고도 한다. 간단하게 코드로 봐보자. #include using namespace std; int main() { int a = 2147483647; cout
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로 선언한 변수 끼리 연산..
1byte, true또는 false이다. 물론 다 안다. 근데 잘 봐라 C++에서는 0이면 false, 0이 아닌 값들은 모두 true가 된다. bool()을 통해 간단하게 bool형으로 형변환이 가능하다. #include using namespace std; int main() { int a = -1; cout
atoi()와 같은 기능을 하는 함수는 stoi()이다. const char* 타입이 아닌 string을 받아서 정수 int를 반환한다. #include #include #include using namespace std; int main() { string s = "1234"; int num = stoi(s); cout
atoi(s.c_str())는 C++에서 문자열 s를 정수 int로 변환하는 방법 중 하나. 여기서 atoi는 C 표준 라이브러리 함수로, "ASCII to integer"의 약자이며, const char* 타입의 C 스타일 문자열을 int로 변환한다. s.c_str()는 string s를 const char* 로 바꿔준다. 문자열을 int로 바꿔야 할 상황이 있다. 예를 들어 입력이 "amumu" 또는 0 이렇게 온다라고 했을 때 문자열, string으로 입력을 받아 입력받은 글자가 문자열인지 숫자인지 확인해야 하는 로직이 필요할 때 말이다. 여기서 입력값이 문자열이면 0을반환하고 그게 아니라면 정수를 체크한다. 만약 정수라면 숫자로 올바르게 변화가 된다. 그럼 이 함수들을 사용해보자. #include..
memset함수는 메모리의 내용(값)을 원하는 크기만큼 특정 값으로 세팅할 수 있는 함수이다. MemorySettting이다. 메모리 설정 음음 함수원형은 아래와 같다. void* memset(void* ptr, int value, size_t num); 첫번째 인자는 void* ptr 세팅하고자 하는 메모리의 시작 주소를 말한다. 즉, 그 주소를 가리키고 있는 포인터를 말한다. 두번째 인자 value는 메모리에 세팅하고자 하는 값을 말한다. int 타입으로 받지만 내부에서는 unsigned char로 변환이 되어 저장된다. 'a'를 넣어도 무방하다는 뜻이다. 세번째 인자 size_t num 길이를 뜻한다. 이 길이는 byte단위로 메모리의 크기 한 조각 단위의 길이를 말한다. [ 길이 * sizeof(..
Vector.normalized를 사용하는 이유는 캐릭터를 좌/우 이동보다 대각선으로 이동할 때 속도가 더 빠른 것을 방지하기 위해 사용하는데 이 그림을 보면 이해가 갈것이다 45도 대각선으로 움직일 때는 기본값 1 * h가 아닌 1.414 * h의 힘을 받기때문에 속도가 변해지는 문제가 생긴다. 따라서 이동하는 각도에 따라 변하는 크기를 1로 정규화 시켜주어야 한다. 다만 여기서 또 문제점은 Vector3(0.5, 0, 0)가 들어오면 이 값은 Vector3(1, 0, 0)이라는 값으로 정규화가 되어 돌아온다.
split()split()은 코딩테스트에서 많이 등장하는 로직이다.split()함수란 다른 프로그래밍 언어에서도 문자열을 특정 문자열을 기준으로 쪼개어서 배열화 시키는 함수이다.C++에서는 STL에서 split()함수를 지원하지 않는다.그래서 만들어야 한다. 만들어도 시간복잡도는 O(n)이다. 예를 들어aaa bbb ccc여기 중간에 띄어쓰기(공백)이 있다.그러면 띄어쓰기를 기반으로 나누어서 배열을 만든다 하면[aaa, bbb, ccc]이렇게 만들어주는 함수가 split()함수이다. split을 만드는데 있어서 외워야 되는 부분이 있다.while ((pos = input.find(delimiter)) != string::npos){ token = input.substr(0,..