2016-08-01 4 views
0

저는 C++에서 프라임 파인더를 코딩하려고합니다. 나는 행복 해요 작동하는 프로그램을 가지고,하지만 난 수십억 소수를 계산하려고 할 때이 같은 오류 메시지를 얻을 : '긴' 'INT'에에서C++에서 높은 숫자로 계산하기

"암시 적 변환을 10000000001에서 값을 변경 ~ 1410065409 "입니다.

한계가 테스트되기를 원하는 수십억 에서조차 빨라지 긴하지만,이 숫자 변경은이를 막습니다.

+1

부호가있는 int는 2,147,483,647까지의 값만 가질 수 있으므로 long (큰 것으로 유지)에서 int로 변환하면 오버플로가됩니다. – Swemoph

+0

경계를'2^64-1'까지 늘리려면'uint64_t'를 사용할 수 있습니다. 그 너머에서, 당신은 선반 빅 - 정수 클래스 (또는 자신의 중 하나를 구현)를 사용해야 할 것이다. BTW, 귀하는 귀하의 질문을 귀하의 질문의 일부로 보여줄 것으로 예상되므로 다른 사람들이 응답 할 때 참조 할 수 있습니다. 또한 C++ ('int','long' 등)의 변수 타입의 한계를 이해할 수 없다는 것은 지식의 근본적인 부족을 보여줍니다. 고소는하지 않았지만 질문을 올리기 전에 "약간의 일"을해야합니다. 즉, 현재 귀하의 질문은 오히려 낮은 품질로 간주됩니다 (불쾌감을 느끼지 마십시오) –

답변

1

long 유형을 사용해야합니다 (정수보다 큰 수).

int test1 = 10; 
int test2 = test1 * 89000000; 
cout << test2; 

긴 정수

long test1 = 10; 
long test2 = test1 * 89000000; 
cout << test2; 

결과가 정확 의지 : 여기 int 오버 플로우 얼마나 예입니다.

0

A는 INT는 "0"범위에서 값을 갖도록 "2,147,483,647"와 "-1"에 "-2,147,483,648"대신 '당신이 돈 경우 서명되지 않은 서명 INT의 사용을 사용 할 수 있습니다 서명 음수를 원하거나 음수와 함께 가고 싶다면 을 사용하여을 얻을 수 있습니다.

관련 문제