본문 바로가기

면접

코딩면접 질문 - java int와 long차이

728x90

코딩면접 질문 - java int와 long차이



프로그램에서 보통 1억번 연산을 1초 정도로 봅니다. 물론 복잡한 연산은 시간이 많이 걸릴 것이고 하드웨어가 더 좋다면 빠르겠지만 보통은 1억번에 1초로 봅니다.


그러면 40억번 연산을 하면 40초이고 50억번 연산을 한다면 50초입니다. 데이터가 아주 커진다면 40억개도 50억개도 될 수 있겠지요? 대한민국의 인구이동통계 2019년도 데이터 건수가 600만건이 넘습니다.


이 데이터를 가공 하려면 연산을 600만번만 할까요? 가공하려고 여러번 돌리다보면 40억번 50억번 60억번 연산도 하게 됩니다. 실제로도 그렇습니다.


만약 배열을 60억개짜리를 만들고 싶다고 하면 int로는 60억개를 만들 수 없습니다.


그 이유에 대해 하나씩 알아보겠습니다.



java에서 int는 32bit를 사용하고 long은 64bit를 사용합니다.


int는 2^5 2의 5승개 long은 2^6 2의 6승개의 공간이 필요합니다.

계산을 안해봐도 외우고 있으신 분들이 있겠지만

math.pow(2, 5) = 32.0

math.pow(2, 6) = 64.0

입니다.


long이 int에 비해서 메모리를 2배 사용합니다..


int는 32bit

00000000 00000000 00000000 00000000


위에서 00000000한줄이 0이 8개입니다. 8개짜리가 4개가 붙어있어서 32개 입니다.


long은 64bit 이므로 8개짜리가 8개 입니다.

00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000


long은 위와 같이 int에 비해서 공간이 두배로 필요합니다.


>>> math.pow(2, 32)

4294967296.0

>>> math.pow(2, 64)

1.8446744073709552e+19


그래서 int는 42억 몇개이고

long은 부동소수점 표기법으로 출력 되긴 했는데 


>>> math.pow(10, 2)

100.0

>>> math.pow(10, 19)

1e+19


이걸 보면 10의 제곱이 100이니까 1e+19는 10의 19제곱입니다.


1 뒤에 0이 19개 붙는다는 뜻입니다. 


억이 pow(10, 8)이고 조가 pow(10, 12) 경이 pow(10, 16) 해가 pow(10, 20)입니다.


그니까 pow(10, 19)는 1000경입니다.


개수로는 1844경개를 표현할 수 있습니다.


숫자로는 -922경부터 +922경까지입니다.


int는

-2147483648 ~ 2147483647



long은

-9223372036854775808 ~ 9223372036854775807


까지 표현할 수 있습니다.



end.





728x90
블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.