쾌락없는 책임 (공부)/C++ 짜잘이

[C++] C++ 의 '1LL'은 무슨 뜻일까?

허스크 2022. 6. 16. 17:45
반응형

개요 + 바로 결론

 볼록 껍질 알고리즘 문제를 보다가 1LL 이라는 글을 봤는데 LL은 주로 long long 줄인 모습 같고 앞에 1은 뭘까 생각하고있었습니다. 그래서 찾아본 뒤 기록하기 위해서 글을 쓰는 것입니다.

 결론을 먼저 말씀드리면 1LL은 1을 Long Long으로 표현한 것입니다.

 

 

 

숫자LL

 일단 기본적으로 C++은 상수를 int 타입으로 계산을 하게 됩니다.

#include <iostream>

using namespace std;

int main(){
    cout << 1000000 * 1000000 << endl;
}

 이를 출력하려고 하면 GCC를 사용하는 제 환경의 경우 오류가 나오게 됩니다.

 이로 인해서 실행조차 안되는데 이를 위해서 사용하는게 1LL 입니다.

#include <iostream>

using namespace std;

int main(){
    cout << 1LL * 1000000 * 1000000 << endl;
}

 이러면 만억? 정도 되는 수가 출력이 되는 모습을 볼 수 있습니다. long long 범위 안에 잘 들어오는 모습을 볼 수 있습니다.

#include <iostream>

using namespace std;

int main(){
    cout << 2LL * 1000000 * 1000000 << endl;
}

 그런데 2LL을 시도하면 위 결과에서 2를 곱한 결과가 나오게 됩니다. 

 

 이를 통해서 알 수 있는 사실은 앞의 수는 단순 상수일 뿐이고 뒤의 LL이 이 상수가 long long 타입임을 알려주는 장치라는 것입니다. 이를 통해서 상수 연산을 long long으로 할 수 있는 것이죠.

 

 

 

순서에 대한 주의점

#include <iostream>

using namespace std;

int main(){
    cout << 1000000 * 1000000 * 2LL << endl;
}

 LL이 완전 만능은 아니기에 상수 연산의 맨 앞에 둬야 long long 연산을 할 수 있습니다. 이를 하지 않으면 이전처럼 int 의 오버플로우가 난다는 경고문을 볼 수 있게 됩니다.

 

 

 

참고 자료

 

What is 1LL or 2LL in C and C++?

I was looking at some of the solutions in Google Code Jam and some people used this things that I had never seen before. For example, 2LL*r+1LL What does 2LL and 1LL mean? Their includes look like

stackoverflow.com

 

반응형