【问题标题】:"Int" multiplication in c++ with "long long" result [duplicate]C ++中的“Int”乘法与“long long”结果[重复]
【发布时间】:2016-06-10 06:00:46
【问题描述】:

我试图找到int 的平方。我的代码如下所示:

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

结果应该是6049417284 但是当我检查输出时,它显示1754449988。 我在做什么错误? long long 应该可以存储结果,但为什么我得到不同的值?

【问题讨论】:

  • 首先num*num 给出一个整数(并溢出),然后隐式转换为long long。

标签: c++ multiplication integer-overflow 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

【讨论】:

  • 我试图理解我的代码中的错误。结果不应该与我的代码一起正确存储吗?
  • @rowang 存储前的中间结果与参数类型一致。
【解决方案2】:

如果您将两个整数值相乘,结果将是一个整数值。那么,整数值赋值给 long long 就没有意义了。

因此,要获得所需的结果,num 也应该很长。

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多