[英]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++;
你首先将c
和n
相乘,然后除以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.