有人可以解释速记分配运算符的实际工作方式吗?

Ksh*_*mal 4 c++ shorthand assignment-operator

#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;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出为:2 3在我看来x * = a / b; 和x = x * a / b; 意思是一样的。有人可以解释这种行为吗?

Bat*_*eba 6

他们不是一样。

x *= a / b分组x *= (a / b)a / b整数算术(是1)进行。

x = x * a / b分组为x = ((x * a) / b)。整数除法的作用并不那么激烈。


Jar*_*d42 5

使用整数除法:3/2is 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