c++ - 关于 "casting"变量的快速建议?非常短的功能需要调整

标签 c++ types casting type-conversion

我有一些采用这种格式的 C++ 代码:

    void calculate(int a, float b, long c) {

    long long result = (a / b) * (1000 / c);
    assert(result > 0);

    // more code...
    }

但是,assert 语句失败了。假设 a、b 和 c 都是正值。然后我认为“结果”由于某种原因最终变成了“结果== 0”。此处介绍的类型转换逻辑中是否存在某些固有因素导致我的代码失败?

我是 C++ 的新手,所以答案似乎很明显......

最佳答案

如果 c > 1000,则表达式 (1000/c) 由于整数除法而变为零。因为两个操作数都是整数类型,所以这里进行整数除法。

结果,表达式 (a/b) * (1000/c) 变为零,因此 result 的值变为零,触发断言。

如果 b > a 也会发生同样的事情,原因同上。

如果整数除法不是您想要的,请像这样重写您的表达式:

long long result = long long((float(a) / b) * (1000.0f / c)); 

这会调用浮点除法而不是整数除法。 ac 的值将被转换为浮点类型,以便计算结果。

关于c++ - 关于 "casting"变量的快速建议?非常短的功能需要调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682593/

相关文章:

c++ - union 中的构造函数导致未定义的行为?

xslt - 如何在 xslt 中控制 boolean 渲染

c++ - C++ 中的显式类型转换

c++ - 愚蠢的STL问题

java - Java 和 C++ 对象的低延迟分布式缓存

C++程序对数字中的数字进行编码

haskell - 值构造器的别名

c# - 为什么下面的代码不能编译?

types - HashMap 宏拒绝类型检查,失败并出现误导性(并且看似有缺陷)的错误消息?

c++ - 转换需要reinterpret_cast、C 风格转换或函数风格转换