第二十四篇:C++的运算符
1.运算符与运算值的解释
运算符与运算值是构成一道计算题的主要元素,所谓的运算符,指的是+,-,*,/....等运算符号。运算值就是运算符操作的资料,例如:1+2 中,1和2都是运算值。
2.一级运算符与二级运算符
一个运算符计算时,操作两个运算值,称为二级运算符,例如 1+2 ,操作1和2这两个运算值,执行相加操作。如此类推,操作一个运算值的将称为一级运算符,而一级运算符是“-”号,相信学过数学的都知道,这个叫做负号,令其数字变成负值,例如:-1 ,如同上列所说,只操作一个运算值。
3.运算公式
运算公式是由运算符与运算值结合的公式叫做运算公式,作用是依照指定的运算值进行运算符的计算。例子如下:
Int a,b,c; //声明三个整数变量
b=10; //给b赋值10
C=1; //给c赋值1
A=b+c; //b+c的结果赋值给a
//注意,C++大小写是有区分的,由于wps的关系,自动大写了,我也不太会用wps这些工作软件
4.运算符的顺序
运算公式中预算符的计算顺序,称为运算符的顺序,比如在日常生活数学老师和我们说,先乘除后加减,运算符的优先顺序我会在后文排序出表格。
5.运算符的结合
一个运算公式内,运算符顺序相同时,按照一般的计算规律,有从左到右和从右到左两种顺序,以加减运算为例子,2+3-4 中先计算 2+3 ,之后用 2+3 的和减去 4 ,5-4 ,有关规律请参照后文。
运算符
“=”运算符的解释
在学生时代,老师对我们说,“=”号是等于的作用,但是在程序当中,“=”号的功能会和老师所说的“等于”不同,所有,我们不能以“等于”这个观点去理解程序的“=”号。
请看如下代码:
Int a,b,c;
B=1;
c=2;
A=b+c;
以上代码的意思是如果使用“等于”观念来思考,可能觉得没什么差别,就是位置改变了。
请看如下代码:
Int a;
A=a+1;
当看了此段代码,你在用“等于”观念来思考,你会觉得,一切都觉得很奇怪。这时候你就应该用程序的观念去思考这段代码。
现在,我很大家说明程序的“=”号,在你宣告一个变量时,那个变量就是你系统内存里面的一小部分,但是我们如何输入一些信息到变量呢 ? 这时候我们需要“=”号,例如 a=1; 就是把数字 1 放进了变量a里面,所以“=”号起的作用是赋值,例如 小明给小红一支笔 。因此,“等于”观念的“=”号和程序里的“=”号是不同的。
算数运算符
运算符号 |
名称 |
运算规律 |
程序例子 |
实例 |
+ |
加法 |
从左到右 |
A + B |
7 + 2 |
- |
减法 |
从左到右 |
A - B |
7 - 2 |
* |
乘法 |
从左到右 |
A * B |
7 * 2 |
/ |
除法 |
从左到右 |
A / B |
7.0 / 2 |
% |
求余 |
从左到右 |
A % B |
7 % 2 |
当你看到上面的表格,你就知道这是算数运算符。在
/ 一列中,发现实例的 7.0 / 2 ,其实加上小数是确保结果正确,不然输出的结果是整数3。详细情况请看C++变量详细解释系列教程。
当然,“-”号可以作成负数,例如:“-1”。
在执行运算时,有如下两个规则决定运算顺序:
1.运算符号运算顺序。
2.运算值的结合规律。
计算算数运算符时,要按照[先乘除后加减]的方式进行运算。
在程序中,运算也是如此,在一段包含加减乘除的运算代码里,顺序与算数相同。那我们再说说 “%”号,此符号在程序中,优先于加减。
运算顺序 |
运算符号 |
运算规律 |
先 |
*,/,% |
从左到右 |
后 |
+,- |
从左到右 |
使用例子:
Int a;
a=10*2/5+8-1;
Cout<<a<<endl;
输出结果:
11
请按任意键继续. . .
那我们现在分析下过程。
1.10 * 2 / 5 + 8 - 1 //先乘除,后加减
2.20 / 5 + 8 - 1 //从左到右计算
3.4 + 8 - 1 //从左到右计算
4.12 - 1 //从左到右计算
5.11 //结果
这就是程序的计算过程。
简单的运算符
上面的一小段,主要想在这段说明下简单化的运算符。此类运算符使运算更简洁。
在上面介绍了算数运算符,那么有没有算数运算符的简单化呢? 答:有。
以下表格A的值为9。
运算符号 |
运算规律 |
运算例子 |
原式 |
结果 |
+= |
从右到左 |
A += 3 |
A=A+3 |
12 |
-= |
从右到左 |
A -= 3 |
A=A-3 |
6 |
*= |
从右到左 |
A *= 3 |
A=A*3 |
27 |
/= |
从右到左 |
A /= 3 |
A=A/3 |
3 |
以上四个运算符运算顺序是一样,没有谁是优先的。注意的是,它是从右到左运算的。
例子:
int a,b;
A=10;
B=20;
B*=a+=10;
输出结果:
400
请按任意键继续. . .
让我们分析下计算过程。
B * = a + = 10 //原式
B * = (a = a + 10) //从右到左,而且顺序相同,加上括号是为了分辨,括号不起作用。
B * = a // 此时:B * = 20
B = B * a // 此时:B = 20 * 20
B // 此时 B = 400
以上就是计算过程。
对比运算符
对比运算符用于比较两边的的运算值作用,当结果为真时(数字代表为 1 ),当结果为假时,(数字代表为 0 )。
运算符号 |
运算符名称 |
运算规律 |
例子 |
== |
等于 |
从左到右 |
A == B |
> |
大于 |
从左到右 |
A > B |
< |
小于 |
从左到右 |
A < B |
>= |
大于或等于 |
从左到右 |
A >= B |
<= |
小于或等于 |
从左到右 |
A <= B |
!= |
不等于 |
从左到右 |
A != B |
说明一下,由于字体问题,“==”号看上去像“=”,其实“==”号是两个“=”组成的。
以下为使用例子:
Int a,b;
A=10;
B=20;
Cout<<“a == b 结果:”<<(a==b)<<endl;
cout<<“a > b 结果:”<<(a>b)<<endl;
Cout<<“a < b 结果:”<<(a<b)<<endl;
Cout<<“a >= b 结果:”<<(a>=b)<<endl;
Cout<<“a <= b 结果:”<<(a<=b)<<endl;
Cout<<“a != b 结果:”<<(a!=b)<<endl;
输出结果:
A == B 结果:0
A > B 结果:0
A < B 结果:1
A >= B 结果:0
A <= B 结果:1
A != B 结果:1
请按任意键继续. . .
那么我们来分析一下这段代码吧。
上面我已经说过,当真为 1,假为 0。
A == B,A是10,B是20,怎么可能等于呢,所有结果为 0,即为假。
A > B,A是10,B是20,B大于A,所有结果为 0,即为假。
A < B,A是10,B是20,B大于A,所以结果为 1,即为真。
A >= B,A是10,B是20,因为A不大于B,也不等于B,所以结果为 0,即为假。
A <= B,A是10,B是20,因为A小于B,但不等于B,所以结果为 1,即为真。
A != B,A是10,B是20,A不等于B,所以结果为 1,即为真。
对于上面的分析,可能你产生疑问为什么 A <= B 结果是1呢?
答:因为 “<=”号和 “>=”号 只要实现了其中一个条件就行。
逻辑运算符
C++的逻辑运算符于条件中执行真,假值运算,以计算结果的真或假控制程序过程。执行运算时,结果为 0 代表假,1 代表真。
运算符号 |
名称 |
运算规律 |
例子 |
说明 |
&& |
且 |
从左到右 |
A && B |
当A和B两者为真时,输出结果为1,否则0 |
|| |
或者 |
从左到右 |
A || B |
当A或B其中一个为真时,输出结果为1,否则0 |
! |
相反 |
从右到左 |
! A |
当A为真时,输出结果为0。当A为假时,输出结果为1 |
“!” 是一级运算符,并且是从右到左运算的运算符。
上面中,逻辑运算符操作的运算值 A,B 可以是判断式的执行结果。
下面是例子:
Int a,b;
A=20;
B=10;
Cout<<(a>b)&&(a<b)<<endl;
Cout<<(a>b)||(a<b)<<endl;
Cout<<!(a>b)<<endl;
输出结果:
(a>b)&&(a<b):0
(a>b)||(a<b): 1
!(a>b):0
请按随意键继续. . .
让我们分析一下结果:
(a>b)&&(a<b) //首先计算两边括号,a是20,b是10.
1&&0 //a大于b,正确,输出1.a不小于b,错误,输出0
0 //因为两边结果不是为真,所有结果为0
(a>b)||(a<b) //首先计算两边括号,a是20,b是10.
1||0 //a大于b,正确,输出1.a不小于b,错误,输出0
1 //因为“||”只要一边为真,结果是为1
!(a>b) //首先计算括号,a是20,b是10.
!1 //因为a大于b,所有输出1
0 //因为 “!”在对比值为1的时候,输出0,对比值为0时,输出1
以上就是分析过程。
++,--,sizeof 运算符
++,-- 运算符
程序经常会用到类似的运算
A = A + 1;
那么,有没有简单的写法呢?是有的。
++ A 或者 A ++
++A 和 A++ 的区别,++A 是先把A加1后赋值给A,再把A传出。A++ 则是先把A传出,再把A+1赋值给A。两者的区别如下代码:
int a,b;
a=1,b=1;
cout<<a++<<endl<<++b<<endl;
输出结果:
1
2
请按随意键继续. . .
从上面代码与结果看到,A++ 与 ++A 的区别。
--与++运算符的不同就是是减1,而返回值的规律和++A,A++相同。
Sizeof 运算符
Sizeof 运算符用于数据类型,或变量在内存所占位置大小,语法如下:
Sizeof(数据类型)
Sizeof(变量)
Sizeof 的详细使用如下:
int a;
cout<<sizeof(int)<<endl;
cout<<sizeof(a)<<endl;
输出结果:
4
4
让我分析下意思。
第一个4是说明int类型占内存的位置大小。
第二个4是说明a变量占内存位置大小。
有人会问,为什么变量a是4呢?
答:因为变量a是int类型,所有占内存位置是4。
运算符“,”
当想要同时宣告多个数据类别相同的变量时,可以使用“,”分隔变量,以下同时宣告三个变量。
Int a,b,c
意思代码内,“,”运算符有同行执行的意思,在编写程序代码时以“,”号分隔时,将被视为同一行。
Cout<<"123", cout<<"456";
以上代码cout以以逗号分隔,这两个cout讲被视为同一行,因此执行结果是 123456 。
if(1>2,2>3,3<4)
{
cout<<"1"<<endl;
}
以上代码结果:
1
请按随意键继续. . .
If的结果取决于最后的一个条件,3<4 真,所以会输出1。
在有“,”运算符的判断里,最后一个返回值为关键。
条件运算符 “?:”
条件运算符配合条件,控制执行结果。语法如下:
(条件) ? 结果1 : 结果2 ;
当条件成立时,执行结果1,当条件不成立,执行结果2。
但是“?:”运算符里,可选择执行的结果1和结果2,只容许在单行,不能用大括号扩充。因此,结果1和结果2的最后是不用再加上“;”了。
在程序中,如果使用条件运算符单行执行,就需要在后加上结尾符号。但是在函数中,并且未成为独立执行,那么最后就不用加上结尾符号。以下分别说明条件运算符如何以“单行执行”使用,和如何以“函数内执行”或“前置执行”。
单行执行
(a>b) ? cout<<a<<endl : cout<<b<<endl;
“,”运算符的单行执行
(a>b)?
Cout<<a<<endl ,
Cout<<a<<endl
:
Cout<<b<<endl ,
Cout<<b<<endl
;
函数内单行执行
Cout<<((a>b)?"a":"b")<<endl;
前置执行
#define Copox(a,b) (a>b)?"a":"b"