在 C++ 中,算术表达式的运算符优先级和结合性决定了表达式的求值顺序。以下是一些常见的算术运算符及其优先级和结合性:
1.括号 ()
优先级:最高
结合性:从内到外;
下面是一个 C++ 程序实例,展示了括号在算术表达式中的优先级如何影响结果。
#include <iostream>
int main() {
int a = 5;
int b = 10;
int c;
// 不使用括号
c = a + b * 2; // b * 2 先计算
std::cout << "Without parentheses: c = " << c << std::endl; // 输出 25
// 使用括号
c = (a + b) * 2; // (a + b) 先计算
std::cout << "With parentheses: c = " << c << std::endl; // 输出 30
// 另一个例子
c = a * b + a; // 先计算 a * b
std::cout << "c = " << c << std::endl; // 输出 60
// 使用括号改变计算顺序
c = a * (b + a); // 先计算 (b + a)
std::cout << "c = " << c << std::endl; // 输出 75
return 0;
}
程序解释
不使用括号:
c = a + b * 2; 中,b * 2 先计算,所以结果是 5 + 20 = 25。
使用括号:
c = (a + b) * 2; 中,(a + b) 先计算,所以结果是 (5 + 10) * 2 = 30。
其他例子:
c = a * b + a; 计算顺序是 a * b,结果为 50 + 5 = 55。
c = a * (b + a); 中,(b + a) 先计算,结果为 5 * (10 + 5) = 75。
2.自增和自减 ++ 和 --(前缀)
优先级:高
结合性:从右到左
以下是一个 C++ 程序实例,展示了前缀自增 (++) 和前缀自减 (–) 运算符的用法及其影响。
#include <iostream>
int main() {
int a = 5;
int b = 10;
int result;
// 前缀自增
result = ++a; // 先自增,然后赋值
std::cout << "After prefix increment: a = " << a << ", result = " << result << std::endl; // 输出 a = 6, result = 6
// 前缀自减
result = --b; // 先自减,然后赋值
std::cout << "After prefix decrement: b = " << b << ", result = " << result << std::endl; // 输出 b = 9, result = 9
// 结合其他操作
result = ++a + --b; // 先进行自增和自减,然后相加
std::cout << "After combining: a = " << a << ", b = " << b << ", result = " << result << std::endl; // 输出 a = 7, b = 8, result = 15
return 0;
}
程序解释
前缀自增:
result = ++a; 中,a 先自增(变为 6),然后将新值赋给 result。输出 a = 6, result = 6。
前缀自减:
result = --b; 中,b 先自减(变为 9),然后将新值赋给 result。输出 b = 9, result = 9。
结合其他操作:
result = ++a + --b; 中,a 先自增(变为 7),b 先自减(变为 8),最后相加得 result = 15。输出 a = 7, b = 8, result = 15。
3.乘法 *、除法 / 和 取余 %
优先级:中
结合性:从左到右
以下是一个 C++ 程序实例,展示了乘法 (*)、除法 (/) 和取余 (%) 运算符的用法及其效果。
#include <iostream>
int main() {
int a = 20;
int b = 6;
int result;
// 乘法
result = a * b;
std::cout << "Multiplication: " << a << " * " << b << " = " << result << std::endl; // 输出 120
// 除法
result = a / b;
std::cout << "Division: " << a << " / " << b << " = " << result << std::endl; // 输出 3
// 取余
result = a % b;
std::cout << "Modulus: " << a << " % " << b << " = " << result << std::endl; // 输出 2
// 结合运算示例
result = (a + b) * (a - b);
std::cout << "Combined operation: (a + b) * (a - b) = " << result << std::endl; // 输出 120
return 0;
}
程序解释
乘法:
result = a * b; 中,计算 20 * 6,结果为 120。
除法:
result = a / b; 中,计算 20 / 6,由于整数除法,结果为 3(小数部分被丢弃)。
取余:
result = a % b; 中,计算 20 % 6,结果为 2,即 20 除以 6 的余数。
结合运算示例:
result = (a + b) * (a - b); 中,先计算 a + b = 26 和 a - b = 14,然后相乘,结果为 364。
4.加法 + 和 减法 -
优先级:低
结合性:从左到右
以下是一个 C++ 程序实例,展示了加法 (+) 和减法 (-) 运算符的用法及其效果。
#include <iostream>
int main() {
int a = 15;
int b = 5;
int result;
// 加法
result = a + b;
std::cout << "Addition: " << a << " + " << b << " = " << result << std::endl; // 输出 20
// 减法
result = a - b;
std::cout << "Subtraction: " << a << " - " << b << " = " << result << std::endl; // 输出 10
// 结合运算示例
result = (a + b) - (b + 5);
std::cout << "Combined operation: (a + b) - (b + 5) = " << result << std::endl; // 输出 10
// 负数示例
int c = -a; // a 的负值
std::cout << "Negative value: c = " << c << std::endl; // 输出 -15
return 0;
}
程序解释
加法:
result = a + b; 中,计算 15 + 5,结果为 20。
减法:
result = a - b; 中,计算 15 - 5,结果为 10。
结合运算示例:
result = (a + b) - (b + 5); 中,先计算 a + b = 20 和 b + 5 = 10,然后相减,结果为 10。
负数示例:
int c = -a; 中,将 a 的负值赋给 c,结果为 -15。