参考链接
运算操作
上几篇已经讲了C++中变量和数据存储,后面我们将讲对里面的数据进行操作需要C++提供了哪些运算符。C++中常见的运算符:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、杂项运算符。
算术运算符:包括+(加)、-(减)、*(乘)、/(除)、++(自加)、--(自减)。下面我们通过程序来进行说明:
#include <iostream>
using namespace std;
int main()
{
float iVar1 = 1, iVar2 = 2;
int tmpVar;
cout << "iVar1 + iVar2 = " << iVar1 + iVar2 << endl; //加
cout << "iVar1 - iVar2 = " << iVar1 - iVar2 << endl; //减
cout << "iVar1 * iVar2 = " << iVar1 * iVar2 << endl; //乘
cout << "iVar1 / iVar2 = " << iVar1 / iVar2 << endl; //除(除数和被除数都是两个浮点型型)
iVar1--; //相当于 iVar1 = iVar1 - 1;
cout << "iVar1 -- =" << iVar1 << endl; //自减
iVar2++; //相当于 iVar2 = iVar2 + 1;
cout << "iVar2 -- =" << iVar2 << endl; //自加
/*特别说明*/
int iTestVar1 = 2, iTestVar2 = 3;
float fTestVar1 = 3;
cout << "iTestVar1 / iTestVar2 = " << iTestVar1 / iTestVar2 << endl; //除(除数和被除数都是两个整型)
cout << "iTestVar1 / fTestVar1 = " << iTestVar1 / fTestVar1 << endl; //除(除数是整型,被除数是浮点型)
cout << "fTestVar1 / iTestVar2 = " << fTestVar1 / iTestVar1 << endl; //除(除数是整型,被除数是浮点型)
getchar();
}
运行结果
iVar1 + iVar2 = 3
iVar1 - iVar2 = -1
iVar1 * iVar2 = 2
iVar1 / iVar2 = 0.5
iVar1 -- = 0
iVar2 -- = 3
iTestVar1 / iTestVar2 = 0
iTestVar1 / fTestVar1 = 0.666667
fTestVar1 / iTestVar2 = 1.5
注:请注意上面程序中的特别部分,在除法中一个为整型和一个为浮点型,他们的结果为浮点型;如果两个为整型,则除法的结果为整型
关系运算符:其实就是比较判别式两边的大小,主要包括:>(大于)、<(小于)、==(等于)、!=(不等于)、>=(大于等于)、<=(小于等于)。下面我们通过程序来进行说明:
#include <iostream>
using namespace std;
int main()
{
float iVar1 = 1, iVar2 = 2;
if(iVar1 > iVar2)
cout << "iVar1 大于 iVar2 " << endl;
else if(iVar1 < iVar2)
cout << "iVar1 小于 iVar2 " << endl;
else if (iVar1 == iVar2)
cout << "iVar1 等于 iVar2 " << endl;
else if (iVar1 != iVar2)
cout << "iVar1 不等于 iVar2 " << endl;
else if (iVar1 <= iVar2)
cout << "iVar1 小于等于 iVar2 " << endl;
else if (iVar1 >= iVar2)
cout << "iVar1 大于等于 iVar2 " << endl;
getchar();
}
运行结果
iVar1 小于 iVar2
注:改变变量的数值,可以测试其它运算符。这里的if语法我们先不要考虑,后面会继续讲。
逻辑运算符:主要有三个逻辑运算符,&&逻辑与(A与B同时为真才表示真)、||逻辑或(A与B只要有一个为真就表示真)、!逻辑非(A为真,!A则为假;反之,A为假,!A则为真)。下面我们通过程序来进行说明:
#include <iostream>
using namespace std;
int main()
{
float iVar1 = 0, iVar2 = 2;
if (iVar1 && iVar2)
cout << "iVar1 && iVar2 " << endl;
if (iVar1 || iVar2)
cout << "iVar1 || iVar2 " << endl;
if (!iVar1)
cout << "!iVar1" << endl;
if (!iVar2)
cout << "!iVar2 " << endl;
getchar();
}
运行结果
iVar1 || iVar2
!iVar1
注:在C++中,只有当变量对应的存储值为0时,才表示假;其它则为真。
位运算符:主要是对字节中的字符进行操作,包括&按位与、|按位或、^按位异或、~按位取反、<<左移、>>右移。
p | q | p&q | p|q | p^q | ~p |
0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
下面讲一下左移和右移,先假设A和B分别为12和13:
A = 0000 1100
B = 0000 1101
A<<2 = 0011 0000 (对应48)
B<<2 = 0011 0100(对应52)
赋值运算符:其实赋值运算符简单的就是一个=,但是因为存在一些符合性的操作,所以符合操作运算符包括:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=,这些操作其实就是变量先进行等号左边对应的运算,然后在赋值给自身。使用方法
A *= B; 等同于 A = A * B; //其它方法以此类推
杂项运算符:这个其实算一些数据访问的方式,包括:sizeof、Condition ? X : Y、,(逗号)、.(点)和 ->(箭头)(这个主要用在结构体体,后面会讲解)、强制类型转换、&、*。通过代码来展示一下:
#include <iostream>
using namespace std;
int main()
{
//sizeof
int iVar1 = 1, iVar2 = 2; //逗号,顺序执行一系列操作
cout << sizeof(iVar1) << endl; //返回int的占位符
int iVar = (iVar1 > iVar2) ? iVar1 : iVar2; //条件为真,输出iVar1;反之,iVar2
cout << "(iVar1 > iVar2) ? iVar1 : iVar2 = " << iVar << endl; //返回int的占位符
int *iPointVar = &iVar2; //取iVar2变量的地址
cout << "*iPointVar = " << *iPointVar << endl; //取iPointVar地址对应的存储值
float fVar = 4.123; //浮点型变量
cout << "int(fVar) = " << int(fVar) << endl; //强制类型转化为整型
getchar();
}
运行结果
4
(iVar1 > iVar2) ? iVar1 : iVar2 = 2
*iPointVar = 2
int(fVar) = 4
注:在数据进行运算操作中,肯定会遇到运算优先级高低的问题,这个只要记住就可以,不是很清楚的时候,最简单的方法就是添加括号。下面给出表格,大家自己简单记一下就可以: