본문 바로가기

c++3

C++ 1ll(1LL)이란 Codeforces의 editorial을 보면 자주 나오는 요소가 있다. 바로 1LL(1ll)이다. 1ll이 어떠한 역할을 하는 걸까? 알아보도록 하자. 위 코드의 출력은 무엇일까? 전혀 예측할 수 없는 값이 나온다. int형으로 선언된 변수 n의 범위를 벗어나 overflow가 발생한 것이다. // int는 32비트를 사용하는 변수이다. 그렇다면 이 코드의 출력은 어떻게 될까? 컴파일러가 warning 해주는 그대로이다. C++에서는 기본 연산을 int(-2^31+1 ~ 2^31-1) 내에서 진행한다. 따라서 1번 코드와 똑같은 Integer overflow가 발생하는 것이다. 이쯤에서 1ll이 무엇인지 어떤 역할을 하는지 설명해보도록 하겠다. 1ll을 '1'과 'll'로 두 개로 쪼갤 수 있다. 앞의.. 2021. 11. 24.
using namespace std의 위험성에 관하여(PS) 글 제목이 다소 자극적으로 보일 수 있어서 결론부터 말씀드리겠습니다. using namespace std는 저희가 짜는 코드(PS)에는 매우매우매우매우 안전합니다. C++을 통해 PS 코드를 작성하게 될 때 꽤 많은 사람들이 겪는 현상이 있습니다. using namespace std; 가 어떤 기능을 하는지도 모른 채 이를 사용하는 것입니다. 물론 using namespace std;의 역할 기능을 필수적으로 알아야 하는 것은 아니지만 매일같이 작성하시는 이 코드를 이해함으로써 만약 추후 작성하실 코드에 오류가 발생하신다면 이에 대해 빠르게 대처할 수 있고 이 코드를 이해한다는 사실만으로 더욱 행복해질 수 있기 때문에 이번 기회에 알아가시면 좋을 것 같습니다. 본격적으로 위험성에 대하여 소개해드리기 전에.. 2021. 11. 23.
삼항 연산자, 조건 연산자 C++ (easy) 처음 알고리즘을 공부하기 시작하였을 때 다른 사람들의 코드를 읽으며 가장 알 수 없었던 부분입니다. C++ (?)(물음표) 기호가 무엇인가요? 등의 검색을 계속했음에도 이 것을 아는 데까지는 꽤 오랜 시간이 걸렸어요. 오늘은 삼항 연산자에 대하여 아주 간단하게 소개하겠습니다. 간단히 표현하자면 삼항 연산자는 (조건) ? (참일 때 반환 결과) : (거짓일 때 반환 결과) 로 이루어 집니다. 예를 들어 이 코드의 반환 값이 예측되나요? 네 맞습니다 3이 출력되지요. 그렇다면 false일 경우에는? 예측하신 그대로입니다. 4가 출력되지요. 앞서 말씀드린 조건 자리에는 if(/*조건*/)에 들어가는 수식에 포함되는 것과 정확히 일치합니다. 그럼 마지막으로 하나 여쭤보겠습니다. ( n > 4 ? 4 : n + .. 2021. 11. 22.