1.3 运算符和表达式

前导知识:
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

延7488

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值