c++操作符一般都是内置类型的,我们还可以自己重载这些操作符用于非内置类型的。
ey:friend ostream& oprator<<(ostream &os,ClassName<T>&g) //重载“<<”运算符,
这节主要回顾C++语言定义的针对内置类型的操作符:
首先要学习一下表达式:表达式是由 操作数operand 和操作符operator 表示,
表达式的结果是右值,可以读取该结果值,但是不允许对它进行赋值
operator:
c++提供一元操作符 和 二元操作符
一元操作符:作用在一个操作数上的操作符,如&:取地址操作符,*引用操作符,
二元操作符:作用在两个操作数上的操作符,如+:加法操作,-:减法操作
注意:1.像* 可以作 引用操作符,是一元的;也可以是乘法操作,是二元的;等其他的操作符;
2.c++提供的操作符对操作数的类型是有要求的,例如(*)引用操作符必须要求操作数类型是指针类型;
3.对于二元操作数而言,必须是两个操作数的类型一致,或者类型可以转换成同一个类型。
优先级 precedence
表达式的值取决于其子表达式是如何进行分组的。
1.一元操作符的优先级是最高的,其次是 乘 和 除,再是二元的加减法操作
2.操作符都是左结合:当两个操作符优先级相同,从左到右依次进行操作符操作。
3.圆括号()凌驾于优先级之上。
算术操作符:
+ 一元正号,+a;//代表正数a
- 一元负号,-a;//代表负数a
ey:int i=1;
int k=-i;
* / % 分别是:乘法,除法,求余
+ - 分别是:加法,减法
除法(/):对两个整数做除法,结果认为整数,如果他的商包含了小数,则小数部分会被截除
ey:int i=21/6;//i=3;
int j=27/7;//j=3;
求余 求模(%):用于计算左操作数除以右操作数的余数,
注意:该操作符的操作数的类型必须是整型,bool char short long int
int i=42;
i%4;//result is 2
/////////////////////////////////////////////////////////////////
如果两个数都是正数,除法/和求模%结果都是正数或零;
如果两个数都是负数,除法/的结果是正数或者零,求模的结果则是负数或者零;
如果只有一个操作数是负的,则除法/的结果是负数或零,求模取决于机器;
ey: 21%-5;//result :if is 1,else is -4;
%结果取决于依据分子还是分母。
/////////////////////////////////////////////////////////////////
注意:算术运算符要考虑两点:
1.除零操作,数学特性导致
2.溢出,超出了其类型表示的范围;计算机的特性
ey://16bit
short value=32767;
short a=1;
a=a+value;//overflows,a=32768,
cout<<a<<endl;
溢出时对于不同的机器获得的值是不相同的,