#include <iostream>
using namespace std;
int main()
{
int x=2,a=3,b=2;
x*=a/b;
cout<<x<<" ";
x=2;
x=x*a/b;
cout<<x;
return 0;
}
我得到的输出为: 2 3 而我认为x * = a / b;和x = x * a / b;意思是一样的。 有人可以解释这种行为吗?
答案 0 :(得分:6)
它们完全不同。
x *= a / b
被分组为 为x *= (a / b)
,并且a / b
发生在整数算术(其为1
)中。
x = x * a / b
被分组为x = ((x * a) / b)
。整数除法的作用不那么剧烈和不同。
答案 1 :(得分:5)
使用整数除法:3/2
是1
。
x*=a/b;
被评估为x *= (a / b)
,因此x *= 3 / 2
-> x *= 1
。x=x*a/b;
被评估为x = (x * a) / b;
,因此(2 * 3) / 3
-> 6 / 2
-> 3
答案 2 :(得分:4)
我得到的输出为:2 3在我看来x * = a / b;和x = x * a / b; 意思是一样的。有人可以解释这种行为吗?
x *= a / b;
// ^^^^^
这是整数除法,其余部分被舍弃,因此3 / 2
为1
。
因此,表达式x *= a / b
与x *= 1
相同,其余为2
。
x = x * a / b;
另一方面,其评估为
x = (x * a) / b;
结果是
x = (2 * 3) / 2;
成为
x = 6 / 2;
是3
答案 3 :(得分:3)
每个[expr.ass]/6 E1 *= E2
与E1 = E1 * E2
完全相同。这并不意味着x*=a/b;
与x=x*a/b;
相同。由于E2
是a/b
,因此x*=a/b;
实际上等效于x=x*(a/b);
,它的结果相同。