为什么* =运算符没有按照我期望的方式运行?

时间:2013-05-12 20:05:26

标签: c++ operators

#include <iostream>
using namespace std;

int main ()
{
    //If a triangle has a perimeter of 9 units, how many iterations(each iteration is 4/3 as much) would it take to obtain a perimeter of 100 units? (or as close to 100 as you can get?)
    double p = 9; int it = 0;
    for(p; p < 100; p = p * 4/3){
        cout << p << endl;
        it++;
    }
    cout << p << endl;
    cout << it << endl;
    system ("PAUSE");
    return 0;
}

因此,对于我正在进行的数学项目,如果在每次迭代期间将周长增加4 / 3x,我必须弄清楚9周长达到100所需的迭代次数。当我像上面那样编写代码时,输​​出很好,但是如果我改变了

for(p; p < 100; p = p * 4/3)

for(p; p < 100; p *= 4/3)

我得到的输出没有意义。我误解了* =运算符吗?我需要在某个地方使用括号吗?

1 个答案:

答案 0 :(得分:28)

这是操作的顺序。在p = p * 4/3编译器正在执行:

p = (p * 4)/3

但是在p *= 4/3中,编译器正在执行:

p = p * (4/3)
由于整数除法,计算机上的4/3为1,所以第二个例子基本上乘以1.

不是除以3(整数),而是除以3.0(双精度)或3.0f(浮点数)。那么p * = 4 / 3.0和p = p * 4 / 3.0是相同的。