C++运算符:算术运算符

一. 基本算术运算符

1. 加法运算符(+)

用于计算两个操作数的和。操作数可以是整数、浮点数、字符等基本数据类型,也可以是自定义的类类型(如果类对加法运算符进行了重载)。

例如:

int num1 = 5;
int num2 = 3;
int sum = num1 + num2;          // sum的值为8
double num3 = 2.5;
double num4 = 1.5;
double result = num3 + num4;    // result的值为4.0

2. 减法运算符(-)

计算两个操作数的差。同样适用于多种数据类型。

例如:

int num5 = 10;
int num6 = 4;
int diff = num5 - num6;    // diff的值为6

3. 乘法运算符(*)

用于求两个操作数的乘积。

例如:

int num7 = 3;
int num8 = 4;
int product = num7 * num8;    // product的值为12

4. 除法运算符(/)

当操作数为整数类型时,执行整数除法,结果为商的整数部分(向下取整)。当操作数为浮点数类型时,执行常规的除法运算得到浮点数结果。

例如:

int num9 = 7;
int num10 = 3;
int quotient1 = num9 / num10;        // quotient1的值为2
double num11 = 7.0;
double num12 = 3.0;
double quotient2 = num11 / num12;        // quotient2的值为2.333333(近似值)

(1). 整数除法

在C++中,当两个操作数都是整数类型(如int、short、long等)时,除法运算符/执行整数除法。

整数除法的结果是商的整数部分,舍去小数部分。例如:

int a = 5;
int b = 2;
int result = a / b;    // 结果为2,而不是2.5

如果被除数是负数,C++标准没有规定是向零取整还是向负无穷取整,不同的编译器可能有不同的实现。例如:

int c = -5;
int d = 2;
int result2 = c / d;    // 在大多数编译器中结果为 - 2

(2). 浮点数除法

如果操作数中有一个是浮点数类型(如float、double、long double),则执行浮点数除法,结果是一个浮点数。

例如:

int num1 = 5;
double num2 = 2.0;
double result3 = num1 / num2;    // 结果为2.5

或者两个操作数都是浮点数:

float num3 = 5.0f;
float num4 = 2.0f;
float result4 = num3 / num4;    // 结果为2.5f

(3). 除法运算中的特殊情况

除数为零:当除数为零时,对于整数除法和浮点数除法都会导致程序运行时错误。在整数除法中,除以零是未定义的行为;在浮点数除法中,按照IEEE 754标准,结果可能是无穷大(正无穷或负无穷)或者特殊的非数(NaN),具体取决于被除数的值。例如:

double num5 = 5.0;
double num6 = 0.0;
double result5 = num5 / num6;    // 结果为正无穷(如果num5是正数)

类型转换:在进行除法运算时,如果操作数类型不同,可能会发生隐式类型转换。通常,整数会转换为浮点数以执行浮点数除法。例如:

short num7 = 3;
double num8 = 4.0;
double result6 = num7 / num8;    // num7会先转换为double类型,然后执行除法,结果为0.75

5. 取模运算符(%)

也称为求余运算符,用于计算两个整数相除的余数。操作数必须为整数类型,如果其中一个操作数为负数,余数的符号与被除数相同

例如:

int num13 = 7;
int num14 = 3;
int remainder1 = num13 % num14;    // remainder1的值为 1
int num15 = -7;
int num16 = 3;
int remainder2 = num15 % num16;    // remainder2的值为 -1

二. 变量的自增和自减运算符

1. 自增运算符(++)

有前置和后置两种用法。前置自增(++i)是先将变量的值加1,然后再使用变量的值;后置自增(i++)是先使用变量的值,然后再将变量的值加1。

例如:

int num17 = 5;
int result1 = ++num17;    // num17的值变为6,result1的值为6
int num18 = 5;
int result2 = num18++;    // num18的值变为6,result2的值为5

2. 自减运算符(--)

有前置和后置两种用法,前置自减(--i)先将变量的值减1,然后再使用变量的值;后置自减(i--)先使用变量的值,然后再将变量的值减1。

int num19 = 5;
int result3 = --num19;    // num19的值变为4,result3的值为4
int num20 = 5;
int result4 = num20--;    // num20的值变为4,result4的值为5

三. 复合赋值运算符

复合赋值运算符是将基本的算术运算符和赋值运算符组合在一起的运算符。例如:

1. 加法赋值运算符(+=)

语句a += b;等价于a = a + b;。例如:

int num21 = 3;
int num22 = 4;
num21 += num22;    // 等价于num21 = num21 + num22,num21的值变为7

2. 减法赋值运算符(-=)    语句 a -= b; 等价于 a = a - b;。

3. 乘法赋值运算符(*=)    语句 a *= b; 等价于 a = a * b;。

4. 除法赋值运算符(/=)    语句 a /= b; 等价于 a = a / b;。

5. 取模赋值运算符(%=)  语句 a %= b; 等价于 a = a % b;。

四. 算术运算符的结合方向

1. 乘除和取余(*、/、%)

在C++中,当表达式中只包含乘除和取余运算符(*、/、%)且没有括号改变运算顺序时,它们按照从左到右的顺序进行运算。例如:

int result = 8 / 2 * 2;            // 先计算8 / 2得到4,再计算4 * 2得到8
// 如果改变运算顺序,结果会不同:
int differentResult = 8 * 2 / 2;    // 先计算8 * 2得到16,再计算16 / 2得到8

2. 加减(+、-)

对于加法和减法运算符(+、-),当它们在一个表达式中且没有括号时,同样按照从左到右的顺序进行计算。例如:

int sum = 3 - 1 + 2;            // 先计算3 - 1得到2,再计算2 + 2得到4
// 若改变顺序:
int differentSum = 3 + 2 - 1;    // 先计算3 + 2得到5,再计算5 - 1得到4

五. 算术运算符的优先级

在C++中,乘(*)、除(/)、求余(%)运算符的优先级高于加(+)、减(-)运算符。

例如:

3 + 4 * 2,先计算乘法运算4 * 2 = 8,然后进行加法运算3 + 8 = 11。
6 / 2 - 1,先进行除法运算6 / 2 = 3,然后进行减法运算3 - 1 = 2。
5 * 3 % 4,按照从左到右的顺序先计算乘法5 * 3 = 15,然后计算求余15 % 4 = 3。
6 / 3 * 5,先计算6 / 3 = 2,然后计算2 * 5 = 10。
5 - 3 + 2,先计算5 - 3 = 2,然后计算2 + 2 = 4。

C++编程语言基础

C++运算符:算术运算符