2016-06-10 4 views
2

Я пытаюсь найти квадрат int. Мой код выглядит следующим образом:«Int» умножение в C++ с результатом «long long»

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

Результат должен быть 6049417284 Но когда я проверяю выход это показывает 1754449988. Какая ошибка я делаю? long long должен иметь возможность сохранять результат, но почему я получаю другое значение?

+0

Сначала 'num * num' дает целое число (и переполнение), которое затем неявно отбрасывается до длинного. –

ответ

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

Если умножить два целочисленных значения, то результат будет целочисленное значение. Тогда присваивание целочисленного значения длинному долгу бессмысленно.

Итак, чтобы получить желаемый результат, число должно быть длинным.

Смежные вопросы