繁体   English   中英

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

[英]difference between x*= and x=x*…?

看看这个功能:

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;
}

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

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

如果是

c = c * n / i++;

首先cn相乘,然后除以i ,最后i增加。

当你这样做

c *= n / i++;

你首先分裂并增加i然后进行乘法运算。


换一种说法:

c = c * n / i++;

等于

c = (c * n) / i++;

c *= n / i++;

等于

c = c * (n / i++);

由于运算符优先级(或者如果您愿意,可以使用语言语法),这两者是:

c = ((c * n) / i++);

c = c * (n / i++);

这个:

a *= E;

相当于:

a = a * (E);

如果您有一个复杂的表达式行如下:

a *= b + c;

获取翻译为:

a = a * (b + c);

......但不是这样的:

a = a * b + c; // WRONG

因此,行:

c *= n/i++;

相当于:

c = c * (n / i++);

对于整数而言 ,与以下内容不同:

c = c * n / i++;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM