from http://www.learncpp.com/cpp-tutorial/32-arithmetic-operators/
一元算术操作符
有两种一元算术操作符,+和-。一元操作符只进行一次操作
Operator | Symbol | Form | Operation |
---|---|---|---|
Unary plus | + | +x | Value of x |
Unary minus | - | -x | Negation of x |
为了获得最好的效果,这些操作符最好与操作对象紧挨在一起(如,-x,不是- x)。
不要将一元减操作符和二元减操作符相混淆。如x = 5 - -3;。
二元操作符
这里有5中二元算术操作符
Operator | Symbol | Form | Operation |
---|---|---|---|
Addition | + | x + y | x plus y |
Subtraction | - | x - y | x minus y |
Multiplication | * | x * y | x multiplied by y |
Division | / | x / y | x divided by y |
Modulus | % | x % y | The remainder of x divided by y |
整型和浮点型除法
很容易认识到除法有两种不同的模式。如果操作数都是整型,除法操作得到的是整型的结果。整型相除,将小数部分都丢弃了。如,7/3=2。注意,整型相除并不会四舍五入,3/4=0而不是1.
如果其中一个或两个操作数都是浮点型,除法操作符执行浮点型相除的模式,返回一个浮点型值,小数部分被保留。如,7.0/3=2.333,7/3.0=2.333,7.0/3.0=2.333.
注意不要试图去除0或0.0,这样通常会使你的程序奔溃,因为这样的方式是没有被定义的!
取模
取模操作符只适用于整型的操作数,它返回的是两个整型值相除后的余数。如,7/3=2余1,所以7%3=1.
取模操作在检测一个数是否被另一个数整除的时候很有用,采用if x%y==0的判断方式。这在当我们需要每隔n个循环进行一次操作时变得很有用
举个例子,我们想要写一个每个20个数字一行输出1到100的数字的程序。我们可以采用取模的方式判断时候需要换行
1: #include <iostream>
2:
3: int main()
4: {
5: using namespace std;
6:
7: // nCount holds the current number to print
8: int nCount = 1; // start at 1
9:
10: // Loop continually until we pass number 100
11: while (nCount <= 100)
12: {
13: cout << nCount << " "; // print the current number
14:
15: // if nCount is divisible by 20, print a new line
16: if (nCount % 20 == 0)
17: cout << endl;
18:
19: nCount = nCount + 1; // go to next number
20: } // end of while
21: } // end of main()
注意当有负值参与到整型相除与取模的操作的情况
如果一个或两个操作数是负值,编译器自由的进行向上截断或是向下截断!大多数编译器是向零靠近进行截断。如,-5/2的值可以是-3或是-2,这取决于你的编译器。
如果取模操作符是负值,这个结果可能是负值也可能是正值!如-5%2可以是-1,也可能是1.
算术赋值操作符
Operator | Symbol | Form | Operation |
---|---|---|---|
Assignment | = | x = y | Assign value y to x |
Addition assignment | += | x += y | Add y to x |
Subtraction assignment | -= | x -= y | Subtract y from x |
Multiplication assignment | *= | x *= y | Multiply x by y |
Division assignment | /= | x /= y | Divide x by y |
Modulus assignment | %= | x %= y | Put the remainder of x / y in x |