master1511   3년 전

저는 지금까지 long long이 2의 64승까지 표현할 수 있다고 알고있었는데

왜 아래 코드를 돌리면 음수가 나오는걸까요....


오버플로우가 발생한 것 같은데 이유를 잘 모르겠습니다.

jseo   3년 전

부호 있는 타입은 2^63 - 1 까지 표현할수 있습니다. 2^64 - 1 까지 표현을 원하시면 unsigned long long 을 쓰시면 됩니다. 

master1511   3년 전

감사합니다....!!!!


해결되었네요!!!

2의 63에서 1을 뺀숫자라니....제가 지금까지 속고살아왔군요.....!!!

139   3년 전

long long은 8byte 자료형인데요, 1바이트당 8비트가 들어가므로 총 64개의 비트로 이루어진 숫자입니다.

컴퓨터는 모든 숫자를 이진수로 저장하기때문에, 부호를 판별하기위해 MSB라는 부분의 비트 하나를 부호판별을 위해 사용해요 ( signed )

그래서 -2^63 ~ 2^63-1 까지 표현 가능하게 되는거죠!

unsigned의 경우 MSB까지 그저 수로 취급하기때문에, 0 ~ 2^64-1 까지 표현 할 수 있게되는거구요.

댓글을 작성하려면 로그인해야 합니다.