通过int划分长整数会遇到什么问题?

时间:2015-06-19 06:30:14

标签: c++ c

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

long long / intlong long / (long long) int

在将长整数除以int时,是否会出现一些安全问题或任何逻辑问题?

2 个答案:

答案 0 :(得分:2)

  

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

答案是,条件是你的分母不是0.

来自文档:

  

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

     
      
  • 如果任一操作数的类型为long double,则另一个操作数应转换为long double
  •   
  • 否则,如果任一操作数为double,则另一个操作数应转换为double
  •   
  • 否则,如果任一操作数为float,则另一个操作数应转换为float
  •   
  • 否则,应对两个操作数执行整体促销(4.5)。
  •   
  • 然后,如果任一操作数为unsigned long,则另一个操作数将转换为unsigned long
  •   
  • 否则,如果一个操作数是long int而另一个是unsigned int,那么如果long int可以代表unsigned int的所有值,则{{1} }应转换为unsigned int;否则两个操作数都应转换为long int
  •   
  • 否则,如果任一操作数为unsigned long int,则另一个操作数应转换为long
  •   
  • 否则,如果任一操作数为long,则另一个操作数应转换为unsigned
  •   
     

[注意:否则,唯一剩下的情况是两个操作数都是unsigned]

所以它会像

int

答案 1 :(得分:0)

正如已经说过的那样,从低到高的精度上升(例如,浮动到双倍到长度加倍,转换没有问题) - 列表中的每一个都可以保存较低值的所有值,所以转换发生时不会丢失信息。

对于整体促销(例如long int和int)

如果任一操作数是long int,那么另一个操作数将转换为long int,这就是结果的类型。

所以,这是安全的(当然除以零除外)。更多details