算术表达式的显式(long long)转换返回0

时间:2018-06-25 09:51:25

标签: c++ casting long-long

当我将long long值与double值相乘时,我得到一个double值。

要将其转换回long long,请使用(long long)

但是我得到的输出是0,应该是10

这是我的代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long n = 100;
    printf("%lld",(long long)0.1*n);

    return 0;
}

这是为什么?我该如何解决?

2 个答案:

答案 0 :(得分:1)

您正在将0.1强制转换为long long。是0。它将起作用:

(long long) (0.1 * ...)

答案 1 :(得分:1)

C样式强制转换比算术运算符(例如乘法运算符)具有更高的运算符优先级。

因此,为了在此处接收非零结果,必须在类型转换发生之前在算术表达式周围加上括号以对其进行评估。

供参考:

从那里报价(重点是我):

  

在解析表达式时,运算符(在上表的某些行上以优先级列出)将比其所有运算符更严格地(如用括号括起来)绑定到其参数在其下方的行中以较低的优先级列出。