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也给出了浮点异常。为什么会这样?因为它会溢出,(有符号)整数溢出具有未定义的行为。