2012-12-13 5 views
1

OK, 나는서명되지 않은 긴 머리 긴 - 이상한 출력

... 상대적으로 큰 unsigned long long의 진수/진수 버전과 나는 아주 이상한 있습니다지고있어 결과를 인쇄 할 수있는 코드를 시도하고있다 :

unsigned long long a = 1llu<<63; 

printf("decimal = %llu\n",a); 
printf("hexadecimal = %llx\n",a); 

출력 :

decimal = 9223372036854775808 
hexadecimal = 8000000000000000 

,745

  • 16 진수 출력 올바른입니다 :

    지금, 여기거야.

  • 소수점 출력 하지입니다

왜 무슨 일이 일어나고 있는지 (9223372036854780000해야한다)? 내가 도대체 ​​뭘 잘못하고있는 겁니까???

+0

2^63이 인쇄됩니다. 나는 여기서 아무 문제도 보지 않는다. – chris

+0

중복 가능성이 있습니까? 흥미 롭 군 : http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long-long-int – abelito

+0

@chris 정말 ??? 64 비트 정수에 맞지 않는다고 생각하니? 그렇다면 왜? –

답변

8

5는 2의 거듭 제곱의 요소가 아니기 때문에 2의 거듭 제곱은 0으로 끝나지 않습니다. 9223372036854780000의 다른 출처가 잘못되었습니다.

+1

다른 소스는 Mac OS X의 프로그래머 용 계산기입니다. 그러나, 네, 당신의 수학적 관점은 확실히 의미가 있습니다. –

+1

@ Dr.Kameleon Punching "1 << 63"은 808로 끝나는 숫자를 제공합니다. 공학용 계산기의 2^x 버튼을 2^63으로 사용하면 프로그래머 모드로 전환하면 9,223,372,036854776000이됩니다. 정확히 무엇을했는지 확신 할 수 없습니다. – Potatoswatter

+0

나는 정말로 혼란 스럽다. 그냥'프로그래머'보기로 전환했습니다. '1'' X'''''''''' 63'입니다. 그리고 여전히 잘못된 값을 출력합니다. - 주 계산기 상자 아래에있는 바이너리 디스플레이가 숫자를 표시합니다. –