前导知识:
1.结合性。左结合性就是运算符两边从左往右算,右结合性就是运算符两边从右往左算。
单目运算符就是操作对象只有一个,双目就是两个,三目就是三个。
关系运算符的结合性为从左到右。
2.优先级。像小学数学中先算乘除后算加减,有括号的先算括号,用我们优先级的术语来说就是优先级 括号>乘除>加减。
C++中,优先级算术运算符>关系运算符>逻辑运算符>赋值运算符。
不同优先级时的运算顺序:从高到低
相同优先级时的运算顺序:算术运算符为左结合(从左到右)
· 可以用圆括号改变运算顺序
3.单目运算符有!、~、++、–、sizeof。
4. 运算符和操作数
W+Z
W和Z是操作数,+是运算符
一、运算符
(一).算术运算符
用于各类数值运算。包括加(+)、减(一)乘(*)、除()、求余(或称模运算,%)、自增(++)、自减(–)。
1.模运算符(求余运算符"%")
双目运算符,两边都是整型数。例如5%2结果为1。而其他四种运算符对int,float,double,char都适用,结果的特号与被除数相同 。
11%5=1 -11%5=-1 11%-5=1
2.除法运算符
1)整数除法:11/5=2 5/2=2 (求商)
2)浮点数除法:11.0/5=2.2 2.0/2=2.5 5/2.0=2.5
3.自增自减运算符(增1和减1运算符)
对一个操作数进行加1或减1运算,其结果仍然赋予该操作数,而且参加运算的操作数必须是变量。而不能是常量或表达式。
1)自增运算符。例如,x++表示在使用x之后使x的值加1,即x=x+1;++x表示使用x之前,先使x的值加1.即x=x+1。
2)自减运算符。例如,x–表示在使用x之后。使x的值减1,即x=x-1;–x表示使用x之前,先使x的值减1,即x-x-1。
3)复合算术赋值。例如,a+=1,相当于a=a+1;a+=b,相当于a=a+b。
注意:良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次增1或者减1运算。
过多的增1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果
(二)关系运算符
用于比较运算。仓括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等(<=)和不等于(!=)六种。
(三)逻辑运算符
用于逻辑运算。包括与(&&)、或 (|)、非(!)三种。
(四)位操作运算符
注意与逻辑运算符区分。
参与运算的量,按二进制位进行运算,得到二进制结果后再转回相应类型。
一般来讲位运算会稍快。
包括位与(&)、位或(|)、位非(~)、位异或(左移(<<)、右移(>> )六种。
对于有符号数,位运算时符号位也会移动,整数最高位是0,负数为1。由编译系统决定最高位补0还是1。
(五)赋值运算符(优先级最低)
用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,–=*=,/=,%=)
和复合位运算赋值(&=,|=,=,>>=,<<=)三类共十一种。
1、赋值语句
三种赋值形式:
简单赋值
多重赋值
简写的复合赋值
(六).条件运算符
三目运算符,用于条件求值(?:) 。
(七)逗号运算符
把若干表达式组合成一个表达式(,)。
表达式1,表达式2,..., 表达式n
多数情况下,并不使用整个逗号表达式的值,更常见的情况是要分别得到各表达式的值
主要用在循环语句中,同时对多个变量赋初值等
for(i=1,j=100;i<j;i++,j--)
//for(循环起始条件;循环结束条件;循环变量增值)
(八)指针运算符
用于取内容(* )和取地址(&)两种运算。
(九)求字节数运算符
用于计算数据类型所点的字节数(sizeof)。
(十).特殊运算符
有括号()、下标[]、成员(->,.)几种。
二、运算的简写(复合的赋值运算符)
左侧为简写,右侧为含义。
a+=b a=a+b
a-=b a=a-b
a*=b a=a*b
a/=b a=a/b
a%=b a=a%b
a&=b a=a&b
a|=b a=a*b
a/=b a=a|b
a^=b a=a^b
a<<=b a=a<<b
a>>=b a=a>>b
三、表达式与赋值中的自动类型转换
取值范围小的类型赋值给取值范围大的类型是安全的,反之是不安全的。
若大类型的值在小类型能容纳的范围之内,则平安无事; 但是浮点数转为整数,会丢失小数部分,而非四舍五入
反之转换后的结果必然是错误的,具体结果与机器和实现方式有关。
避免如此使用,好的编译器会发出警告
四、自动类型转换与强制类型转换运算符
强转(Casting)可以消除从大到小的警告
(类型)表达式
int x=10;
float y;
y=(float)x;
/*
x==10
y==10.000000
*/
int a,b;
float c,d;
a=15,b=2;
c=a/b;
//c==7.000000
d=(float)a/b;
//d=7.500000