文章目录
三、运算符
1、算术运算符
运算符 | 含义 | 示例 |
---|---|---|
+ | 对两个数字进行相加的计算 | 10 + 3 = 13 |
- | 对两个数字进行相减的计算 | 10 - 3 = 7 |
* | 对两个数字进行相乘的计算 | 10 * 3 = 30 |
/ | 对两个数字进行除法的计算 | 10 / 3 = 3 |
% | 对两个数字进行求模运算(求余数) | 10 % 3 = 1 |
注意事项:
整型与整型的计算结果,还是一个整型。所以,如果10/3的时候,得到的结果是3.3333333,此时系统会将这个数字强制类型类型转换成整型的结果,舍去小数点后面所有的数字,只保留整数部分,也就是3。
在进行计算的时候,结果会进行类型的提升,将结果提升为取值范围大的数据类型。
- int与int的计算结果是int
- int与long的计算结果是long
- float与long的计算结果是float
- float与double的计算结果是double
- ...
#include <iostream>int main(){// 定义两个变量,用来做计算std::cout << 10 + 3 << std::endl; // 13std::cout << 10 - 3 << std::endl; // 7std::cout << 10 * 3 << std::endl; // 30std::cout << 10 / 3 << std::endl; // 3std::cout << 10 % 3 << std::endl; // 1return 0;
}
重点来了!自增自减运算符!
++、–是自增自减运算符,表示在现有的值的基础上,对数据进行+1和-1的操作。
#include <iostream>int main(){// 定义一个整型的变量int number = 10;// 在现有的值的基础上+1number++;// number现在的结果就是11std::cout << number << std::endl;return 0;
}
但是!!自增自减运算符,还可以写在变量前面!
- 自增自减运算符,在变量之前,表示先对变量进行计算,再取变量的值使用。
- 自增自减运算符,在变量之后,表示先取变量的值使用,再对变量进行计算。
#include <iostream>int main(){// 定义一个变量int number = 10;std::cout << number++ << std::endl; // 输出10, 结束后number的值自增为11std::cout << ++number << std::endl; // 输出12, 在上一步结束之后, number的值自增为了11, 在这里先进行计算, 再取变量的值使用。运算结束后, number的值为12std::cout << --number << std::endl; // 输出11, 在12的基础上, 先减一, 再输出结果。运算结束后, number的值为11std::cout << number-- << std::endl; // 输出11, 在11的基础上, 先取值, 再减一。运算结束后, number的值为10std::cout << number << std::endl; // 输出10return 0;
}
练习题
// 有一个三位的数字, 计算每一位上的数字的和
#include <iostream>int main(){// 定义一个三位的数字int number = 123;// 分别获取每一位的数字int g = number % 10;int s = number / 10 % 10;int b = number / 100;// 计算每一位的数字的和int result = g + s + b;std::cout << result << std::endl;return 0;
}
2、赋值运算符
在C++中的赋值运算符是=,可以将等号右边的值,给等号左边的变量进行赋值。
#include <iostream>int main(){// 定义一个变量int variable;// 给这个变量进行赋值variable = 10;// 这里的等号,就是一个赋值运算符,将等号右边的值给左边的变量进行赋值。// 赋值完成后,变量variable的值,就是10return 0;
}
请注意:在C++中,等号是赋值的意思,并不是比较相等的意思。
赋值运算符的意义其实很简单,就是等号右边的值给左边的变量进行赋值。但与此同时,赋值运算符与上述的算术运算符类似,也是有运算的结果的。赋值运算的结果就是赋值完成以后的变量的值!
#include <iostream>int main(){// 定义一个变量int number;// 给变量赋值,并输出赋值结果std::cout << (number = 100) << std::endl; // 这里的输出结果是100,因为赋值完成之后的变量number的值就是100return 0;
}
此外,程序员都可会偷懒了,在赋值运算符的基础上,又结合了常用的计算,衍生出来了其他的组合的运算符。
常见的组合运算符:+= -= *= /= %=
以 += 为例,表示将一个变量,在现有的值的基础上进行加法的计算。
#include <iostream>int main(){// 定义一个变量int number = 10;// 让变量在现有的值的基础上+10number += 10;std::cout << number << std::endl; // number的结果就是20return 0;
}
在上述代码中,我们可以将number += 10, 理解为 number = (int)(number + 10);
对数字number进行加10的计算,并将计算的结果再强制类型转换成变量原来的类型。
例如:
char c = ‘a’;
c += 1;
最后c的结果是b,其实在这里已经完成了结果的强制类型转换。因为字符型的变量在参与运算的时候,结果会自动的转型为int类型
因为组合运算符内置了强制类型转换的操作,才会使得将计算的结果再转型为char类型
3、关系运算符
关系运算,就是对两个数字进行大小、相等的比较的运算。常用的关系运算符如下:
符号 | 描述 | 示例 |
---|---|---|
== | 判断两个数字是否相等 | a == b |
!= | 判断两个数字是否不相等 | a != b |
> | 判断左边的数字是否大于右边的数字 | a > b |
< | 判断左边的数字是否小于右边的数字 | a < b |
>= | 判断左边的数字是否大于等于右边的数字 | a >= b |
<= | 判断右边的数字是否小于等于右边的数字 | a <= b |
关系运算符比较的是数值类型和字符类型的数据,得到的比较结果一定是bool类型。
#include <iostream>int main(){std::cout << (10 > 5) << std::endl; // truestd::cout << (10 < 5) << std::endl; // falsestd::cout << (10 >= 5) << std::endl; // truestd::cout << (10 <= 5) << std::endl; // falsestd::cout << (10 == 5) << std::endl; // falsestd::cout << (10 != 5) << std::endl; // truereturn 0;
}
4、逻辑运算符
逻辑运算,是对两个布尔类型的变量进行的逻辑操作。常见的逻辑运算符如下:
符号 | 描述 | 示例 |
---|---|---|
& | 与运算,两真即为真,任意一个为假,结果即为假 | true & false |
| | 或运算,两假即为假,任意一个为真,结果即为真 | true | false |
! | 非运算,非真即假,非假即真 | !true |
^ | 异或运算,相同为假,不同为真 | true ^ false |
&& | 短路与,左边的结果为假,右边的表达式不参与运算 | false && true |
|| | 短路或,左边的结果为真,右边的表达式不参与运算 | true || false |
关系运算符比较的是数值类型和字符类型的数据,得到的比较结果一定是bool类型。
#include <iostream>int main(){std::cout << (true & false) << std::endl; // falsestd::cout << (true | false) << std::endl; // truestd::cout << (!true) << std::endl; // falsestd::cout << (true ^ true) << std::endl; // falseint num1 = 10;int num2 = 20;bool res = num1++ > 10 && num2++ < 100;std::cout << "res = " << res << ", num1 = " << num1 << ", num2 = " << num2 << std::endl;return 0;
}
5、位运算符
位运算,是作用于两个整型数字的运算。将参与运算的每一个数字计算出补码,对补码中的每一位进行类似于逻辑运算的操作,1相当于True,0相当于False。
符号 | 描述 | 示例 |
---|---|---|
& | 位与运算 | 10 & 20 |
| | 位或运算 | 10 | 20 |
^ | 位异或运算 | 10 ^ 20 |
~ | 按位取反运算 | ~10 |
<< | 位左移运算 | 10 << 2 |
>> | 位右移运算 | 10 >> 2 |
~
:对数字补码的每一位进行取反,包括符号位。<<
:对数字补码的每一位向左移动指定的位数,右侧补0。>>
:对数字补码的每一位向右移动指定的位数,左侧补符号位。
#include <iostream>int main() {std::cout << (10 & 20) << std::endl; // 位与运算std::cout << (10 | 20) << std::endl; // 位或运算std::cout << (10 ^ 20) << std::endl; // 位异或运算std::cout << (~10) << std::endl; // 按位取反运算std::cout << (10 << 2) << std::endl; // 位左移运算std::cout << (10 >> 2) << std::endl; // 位右移运算return 0;
}
6、三目运算符
三目运算符是一个带有简单逻辑的运算符,用?:
来表示,语法如下: condition ? value1 : value2
语义: condition是一个bool类型的变量或者bool结果的表达式,如果为true, 运算的结果为value1;如果为false, 运算的结果为value2。
#include <iostream>using namespace std;int main() {// 从控制台输入两个数字,计算两个数字的最大值int num1, num2;cout << "请输入一个数字: ";cin >> num1;cout << "请再次输入一个数字: ";cin >> num2;int res = num1 > num2 ? num1 : num2;cout << "最大值是: " << res << endl;return 0;
}