什么是运算符?
运算符是指可以进行运算操作的符号。
而提供给运算符进行操作的数值我们把它们叫做操作数。所有的操作数由于都可以返回一个值,因此它们都是表达式。
c++有好几类运算符,其中最常用的是:
- 赋值运算符
- 数学运算符
赋值运算符
赋值运算符即可以实现对操作数进行赋值的功能。
例:
x = 1;
该语句中”=”实现了将符号右边的1赋给左右的x的目的,因此”=”叫做赋值运算符。
注意:常量都要放在右边,不能放在左边。因为常量是恒定不变的。
错误例子:
1 = x; //错误例子
数学运算符
数学运算符即可以实现对操作数进行数学运算的功能。
例:
#include <iostream>
int main(){
int x , y;
1+2; //加法运算符
1-2; //减法运算符
1*2; //乘法运算符
1/2; //除法运算符
1%2; //求模运算符
//求模运算符"%"用来求出两个操作数相除之后的余数
x = 30/20;
y = 30%20;
std::cout << "30除以20等于:" << x << "余" << y << std::endl;
return 0;
}
输出:
30除以20等于:1余10
赋值运算符与数学运算符的联合
+= 加等
-= 减等
*= 乘等
/= 除等
%= 模等
将赋值运算符“=”与数学运算符“+ - * / %”联合起来使用,它表示将 右值 与 左值 运算的结果再赋给左值。
例:将变量a与一个数值6相加的结果赋给变量a。
#include <iostream>
int main(){
int a=2,b;
b = a+6; //先a+b的结果赋给变量b
a = b; //再由变量b赋给变量a
std::cout << a;
return 0;
}
输出:
8
此例可以简写为:将变量a与6相加的结果直接再赋给变量a
#include <iostream>
int main(){
int a=2;
a = a + 6; //变量a+6的结果直接赋给变量a
std::cout << a;
return 0;
}
输出:
8
还可以更加简写为:使用赋值运算符与数学运算符联合的方法:
#include <iostream>
int main(){
int a=2;
a += 6; //加等 等同于a=a+6;
std::cout << a;
return 0;
}
输出:
8
该例将赋值运算符“=”与数学运算符“+”联合起来使用,它表示将右值与左值相加的结果再赋给左值。
它的作用与a=a+6是相同的。
关糸运算符
关糸运算符用来对两个表达式进行比较,并根据比较结果返回一个真值或者假值。
是真值还是假值取决于使用的关糸运算符。
关糸运算符 | 意义 |
---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
逻辑”与”运算符
逻辑”与”运算符,表示如果运算符两边的条件表达式为真,那么该逻辑表达式方才成立。
关键字:&&
例:
#include <iostream>
int main(){
int x = 99;
if(x>1 && x<100){ //x是99,大于1也小于100。该逻辑表达式成立
std::cout << "x是大于1且小于100的数。\n";
}
return 0;
}
输出:
x是大于1且小于100的数。
逻辑”或”运算符
逻辑”或”运算符,它只需要逻辑表达式一边的条件为真,那么整个表达式为真。
关键字:||
例:
#include <iostream>
int main(){
int x = 0;
if(x>1 || x<100){ //x是99,小于100。该逻辑表达式成立
std::cout << "x是一个大于1或小于100的数。\n";
}
return 0;
}
输出:
x是一个大于1或小于100的数。
逻辑”非”运算符
逻辑”非”运算符,它只有一个准则,也就是当条件为假时,它才为真。
关键字:”!”
例:
#include <iostream>
int main(){
int x = 0;
if (!x == 0){ //当x==0条件为真时,取假
std::cout << "x不等于0\n";
}
else{
std::cout << "x等于0\n";
}
return 0;
}
输出:
x等于0
逻辑运算符优先级
在一行语句中出现3个或3个以上的逻辑运算符,就会产生优先级的问题,也就是哪个逻辑运算符先执行,哪个逻辑运算符后执行的问题。
逻辑”与”&& 优先于逻辑”或”||,见例1。
或者直接使用小括号”()”来明确哪个逻辑表达式优先。刚例2。
例1:
#include <iostream>
int main(){
int x = 1, y = 0, z = 3;
if(x>1 && y>1 || z>1){ //逻辑与优先于逻辑或
std::cout << "成立\n";
}
else{
std::cout << "失败\n";
}
return 0;
}
输出:重点内容
成立
当int x = 1, y = 0, z = 3;
逻辑表达式中:
x>1 && y>1 || z>1
x>1 && y>1 为假
z>1 为真
假||真
结果为真
例2:使用小括号”()”来确定逻辑”或”先执行。
#include <iostream>
int main(){
int x = 1, y = 0, z = 3;
if(x>1 && (y>1 || z>1)){ //使用小括号"()"来确定逻辑"或"先执行。
std::cout << "成立\n";
}
else{
std::cout << "失败\n";
}
return 0;
}
输出:
失败
当int x = 1, y = 0, z = 3;
逻辑表达式中:
x>1 && (y>1 || z>1)
y>1|| z>1 为真
x>1 &&假 为假
运算式的真假关糸
计算机只能分辨0和1,因此所有的数字、符号、字母在计算机看来都只有0和1两种区别,即断电和通电,自然它的逻辑也只有2个,”是”或者”否”。用1来代表”是”,用0代表”否”。
注:空字符’\0’是假值。
c++的语法中,沿用了这种方法,0代表”否”,也就是假,除了0之外的任何数值都为真。因此有时我们也可以看到这样的语句:
例:判断小括号中的数值是真还是假。
#include <iostream>
int main(){
char a = 'A';
if(a){
std::cout << "大写字母A返回的是真值\n";
}
return 0;
}
输出:
大写字母A返回的是真值
三目运算符
示例:z = (a>b)?a:b;
如果问号”?”左边的表达式”(a>b)”为真,那么把冒号”:”左边的表达式”a”的值赋给”z”,否则把冒号”:”右边的表达式的值赋给”z”。
三目运算符有三个操作对象,三目运算符通常用于赋值语句之中。
表达式1? 表达式2: 表达式3
关键字:? :
三目运算符嵌套结合方向是从右至左,如:
a>b?a:c>d?c:d;应理解为
a>b?a:(c>d?c:d);
例1:输入两个数,进行对比后输出最大的数
//输入两个数,进行对比后输出最大的数
#include <iostream>
int main(){
int a, b;
std::cout << "请输入第1个数:";
std::cin >> a;
std::cout << "请输入第2个数:";
std::cin >> b;
//两数对比,把最大的数赋给输出。如果a>b那么输出a,否则输出b。
std::cout << "最大的数是:" << ((a>b)?a:b) << std::endl;
return 0;
}
输出:输入第1个数为11,输入第2个数为22
请输入第1个数:11
请输入第2个数:22
最大的数是:22
三目运算符的类别
三目运算符允许对不同型别的数值进行操作,例如可以同时操作一个浮点型变量和一个整数变量。
三目运算符会将操作数的值都转化为它们之中最高级别的类型。
如:两个操作数分别是整型和浮点型变量,那么整型变量会被转化为浮点型变量,再对它们进行求值操作,也就是该表达式的值。
例:
#include <iostream>
int main(){
int a = 1;
float b = 2.1f; //注意:浮点型数值后面要加f,如不加f会被默认为double型
std::cout << (a>b?a:b) << std::endl;
return 0;
}
输出:
2.1
三目运算符在字符型变量中的使用
例:
#include <iostream>
int main(){
char a;
std::cout << "请输入一个字母:";
std::cin >> a;
std::cout << "你输入的字母小写为:" << (char)(a>='A' && a<='Z'? a+32: a) << std::endl;
return 0;
}
输出:
输入f:
请输入一个字母:f
你输入的字母小写为:f
输入F:
请输入一个字母:F
你输入的字母小写为:f
(char)(a>='A' && a<='Z'? a+32: a)
判断a是否在大写字母A到Z之间的任意一个字符。如果是则再加32变成小写字母,否则直接输出。
注:在ASCII码中,大小写字符差值是32。
(char):把结果转换为字符型。