C++ 用整除长整除长整除会遇到什么问题?

C++ 用整除长整除长整除会遇到什么问题?,c++,c,C++,C,进行除法的更安全方法是什么: long-long/int或long-long/(long-long)int 在将long除以int时,会有一些安全问题或任何逻辑问题吗 在将long除以int时,会有一些安全问题吗 还是有什么逻辑问题 答案是否,条件是分母不是0 从文档中: 许多期望操作数为算术或枚举类型的二进制运算符会导致转换,并以类似的方式生成结果类型。目的是生成一个公共类型,它也是结果的类型。此模式称为常用算术转换,其定义如下: 如果任一操作数的类型为长双精度,则另一个操作数应转换为长双精

进行除法的更安全方法是什么:

long-long/int
long-long/(long-long)int

在将long除以int时,会有一些安全问题或任何逻辑问题吗

在将long除以int时,会有一些安全问题吗 还是有什么逻辑问题

答案是,条件是分母不是0

从文档中:

许多期望操作数为算术或枚举类型的二进制运算符会导致转换,并以类似的方式生成结果类型。目的是生成一个公共类型,它也是结果的类型。此模式称为常用算术转换,其定义如下:

  • 如果任一操作数的类型为
    长双精度
    ,则另一个操作数应转换为
    长双精度
  • 否则,如果其中一个操作数是
    double
    ,则另一个操作数应转换为
    double
  • 否则,如果任一操作数为
    浮点
    ,则另一个操作数应转换为
    浮点
  • 否则,应在两个操作数上执行积分提升(4.5)
  • 然后,如果其中一个操作数为
    无符号长
    ,则另一个操作数应转换为
    无符号长
  • 否则,如果一个操作数是
    长整数
    而另一个是
    无符号整数
    ,那么如果
    长整数
    可以表示
    无符号整数
    的所有值,则
    无符号整数
    应转换为
    长整数
    ;否则,两个操作数都应转换为无符号长整数
  • 否则,如果其中一个操作数
    ,则另一个操作数应转换为
  • 否则,如果其中一个操作数是
    无符号的
    ,则另一个操作数应转换为
    无符号的
[注意:否则,剩下的唯一情况是两个操作数都是
int
]

那就好像

int / int => returns int

float / float => returns float

double /double => returns double

int / double => returns double

int / float => returns float

如前所述,从较低的精度到较高的精度(例如,浮点到双精度再到长双精度,转换没有问题)-列表中的每个较高的值都可以保存较低值的所有值,因此转换时不会丢失信息

用于整体促销(例如长整型和整型)

如果其中一个操作数是长整型,则另一个操作数将转换为长整型,这就是结果的类型


所以,这是安全的(当然除了被零除)。更多信息。

此类操作应始终使用最大类型执行。但我没有任何参考文献支持这一点。只要你不被零除,任何人都是安全的,除非分母I大于分子,你会得到一个
0
。对相同符号的整数进行算术运算的效果与预期一样。较小的类型(如果有)已正确升级为较大的类型。@iharob MinValue/-1肯定不安全。
long.MinValue(好像我记得宏)/-1=?
:-)LLONG_MIN/-1给出浮点异常。尽管如此,LLONG_MIN/(long-long)-1也给出了浮点异常。为什么会这样?因为它会溢出,(有符号)整数溢出具有未定义的行为。