10

の二乗を求めようとしていますint。私のコードは以下のようになります:

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

結果はだったはずですが6049417284 、出力を確認すると1754449988. 私がしている間違いは何ですか? long long結果を保存できるはずですが、なぜ別の値が得られるのでしょうか?

4

2 に答える 2

5

この場合、中間結果の型は最初の引数の型と同じです。したがって、このコードは間違った値を入れます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
于 2016-06-10T06:03:45.393 に答える
4

2 つの整数値を乗算すると、結果は整数値になります。その場合、long long に整数値を代入しても意味がありません。

したがって、目的の結果を得るには、num も long long にする必要があります。

于 2016-06-10T06:17:54.143 に答える