2016-06-10 9 views
2

int의 사각형을 찾으려고합니다. 결과는 6049417284 을 했어야C++에서 "long long"결과를 갖는 "Int"곱하기

long long sqr=0; 
int num=77778; 
sqr= num*num; 

하지만 출력을 검사 할 때 그것은 1754449988을 보여줍니다 내 코드는 다음과 같습니다. 내가하고있는 실수는 무엇입니까? long long은 결과를 저장할 수 있어야하지만 다른 값을 얻는 이유는 무엇입니까?

+0

처음에 'num * num'은 정수 (그리고 오버플로)를 내고, long long으로 암시 적으로 형변환됩니다. –

답변

1

중간 결과 유형은이 경우 첫 번째 인수 유형과 동일합니다. 따라서이 코드는 sqr에 잘못된 값을 넣습니다 (정수 오버플로가 있기 때문입니다). 이 시도 :

long long num = 77778; 
long long sqr = num * num; 

또 다른 방법은 주조로 :

int num = 77778; 
long long sqr = (long long) num * num; 

더 잘 이해하려면이 행 확인할 수 있습니다 : 두 개의 정수 값을 곱하면

int ia = 1, ib = 2 
double da = 1.0, db = 2.0 ; 
double ic = ia/ib; // c == 0.0, because intermediate result of division is 0 
double dc = da/db; // c == 0.5, expected result 
+0

코드에서 실수를 이해하려고합니다. 결과가 내 코드와 함께 올바르게 저장되면 안됩니까? – roang

+1

@rowang 저장되기 이전의 중간 결과는 인수 유형과 동일합니다. –

0

을, 결과가 될 것입니다 정수 값. 그렇다면 정수 값을 long long으로 할당하는 것은 의미가 없습니다.

원하는 결과를 얻으려면 num도 길어야합니다.