2013-03-23 1 views
0

내 C++ 프로그램은 런타임 중에 10^16까지 값을 생성 할 수 있습니다. "long long int"를 사용하려고했지만 작동하지 않았습니다. 10^16에 해당하는 데이터 유형은 무엇입니까?어떤 데이터 유형이 C++에서 10^16에 해당합니까?

감사합니다. ..

+5

"작동하지 않았습니다"보다 구체적으로 기재 할 수 있습니까? –

+0

6 분 동안 내 프로그램에서 응답이 없습니다. 프로그램을 마쳤을 때 오버플로 오류가 발생했습니다. – selentoptas

+0

@Selen 정수 오버플로보다 스택 오버 플로우와 비슷하게 들린다. '10^16' 값이 문제라고 생각하게 만드는 이유는 무엇입니까? –

답변

1

64 비트 미만이므로 .. 긴 긴 잘해야

+0

조금이라도 확장 할 수 없다면 이것은 아마도 주석이어야합니다. – Mysticial

+0

나는 오랫동안 노력했지만 그것은 문제가 컴파일러에 대한 생각, 당신의 대답을 주셔서 감사합니다. – selentoptas

6

long long int의 최저 보증 최대 약 10^192^63 - 1이다. 괜찮을거야. 확인하려면 <cstdint>std::int_least64_t 유형을 사용하십시오. 최소한 64 비트가 보장됩니다.

1

시도 int64_t. 그것은 충분히 길어야합니다. 그러나 문자 그대로의 정수를 입력해야합니다 : 당신이 1E16을 말한다면

int64_t n = 10000000000000000; 

, 즉 리터럴 double, 그리고 정수로 변환 예기치 않은 결과가 발생할 수 있습니다.

+2

10000000000000000LL <- 일부 컴파일러의 경우 접미사가 필요할 수 있습니다. – s3rius

+0

@ s3rius : 그렇게해서는 안됩니다. 정수 리터럴에 맞는 유형이 있습니다 ... –

+0

gcc를 C99 이전 모드로 실행하지 않는 한 기본적으로 (또는 단순히 C89/90 컴파일러 인 경우) 컴파일러가 ' C99에서 일반적인 긴 long 상수가 C89에서 지원되는 가장 긴 정수 유형 (long (또는 unsigned long))이었습니다. 놀람. –

-2

부호없는 long long Int는 최대 10^18까지 작동합니다!

+0

스택 오버플로에 오신 것을 환영합니다! 질문은 [도움말]에 정의 된 스택 오버플로에 대한 주제가 아닙니다. 그런 질문에 대답하지 마십시오. 대신주의를 기울여 플래그를 지정해야하며 닫히거나 적절히 마이그레이션됩니다. –

관련 문제