x*=和x = x*...之间的差异?

Dav*_*vid 5 c++ visual-studio-2010 visual-c++

看看这个功能:

int c(int n,int k) {
    if (n<0 || k<0 || n<k) {
        return 0;
    }
    int c=1,p=n-k,i=1;
    while (n>p) {
        c = c * n/i++; // <<<
        n--;
    }
    return c;
}
Run Code Online (Sandbox Code Playgroud)

当我改变c=c*n/i++c*=n/i++功能无法正常工作.例如c(4,2)= 4(= 6真)我跟踪:1.i ++ 2./3.*=和所有其他可能性但没有答案.为什么?

编辑:这不是我所知道的问题.我问为什么编译器回答的c(4,2)=4时候c*=n/i++.我跟踪*/++, *++/, /*++, /++*, ++*/, ++/*但回答不是4.什么是编译器的逻辑?(抱歉英语不好)

Som*_*ude 10

如果是

c = c * n / i++;
Run Code Online (Sandbox Code Playgroud)

cn,然后除以它i,最后i增加.

当你这样做

c *= n / i++;
Run Code Online (Sandbox Code Playgroud)

你先分裂并增加i,然后做乘法.


换一种说法:

c = c * n / i++;
Run Code Online (Sandbox Code Playgroud)

等于

c = (c * n) / i++;
Run Code Online (Sandbox Code Playgroud)

c *= n / i++;
Run Code Online (Sandbox Code Playgroud)

等于

c = c * (n / i++);
Run Code Online (Sandbox Code Playgroud)