c ++中两种划分方式的区别

时间:2017-10-27 09:31:19

标签: c++

之间有什么区别
int n,s;
cin>>n;
s=n*1/10;
cout<<s;

int n,s;
cin>>n;
s=n*10/100;
cout<<s;

以及100/1000和1000/10000以及......

当我输入n的大数字(例如1000000000)时,它有不同的输出。

我得到了答案!!

问题是由于评估顺序和整数

溢出

1 个答案:

答案 0 :(得分:0)

如果您有一个大数字并乘以10,则该数字可能会溢出。这意味着您尝试存储的数字太大,无法容纳为该数字分配的内存。有符号整数溢出的确切结果称为“未定义行为”,这意味着由编译器决定如何处理此问题。

当你除以100时,你所划分的数字现在不同于你预期的数字 - 从而给你错误的结果。

这可能只是调试版本的问题;因为编译器可能会将* 10/100替换为/ 10作为优化的一部分,它将为发布版本做。

然后,将总是定义乘以1然后除以10的另一项,因为乘法将使数字保持不变。