写法规范:运算符两侧一般要加上一个空格,为了美观,易读。
1,运算符的定义:告诉编译器执行各种操作的符号。
2,分类:
(1)功能划分:算数运算符,关系与逻辑运算符,按位运算符。
(2)操作数划分:单目运算符a++,双目运算符a+b,三目运算符(?:)
3,优先级和结合性:
优先级:分15级,1级最高,15级最低,运算过程中,先做优先级高的运算,再做优先级低的工作, 同等优先级情况下按照运算符的结合性运算。
[img=http://img.bbs.csdn.net/upload/201508/05/1438748685_194968.png][/img]
[img=http://img.bbs.csdn.net/upload/201508/05/1438748669_855712.png][/img]
[img=http://img.bbs.csdn.net/upload/201508/05/1438748698_944539.png][/img]
结合性:左结合a+b-c
右结合x=y=z
1)算数运算符,+,-,*,/(操作数为整型,结果是整型,若有一个实型,结果为双精度实型),%(操作数只能是整型)
2)求余运算符%,运算数必须是整数,m%n m除以n,取余数部分
注意事项:m和n都不能是小数,否则报错。
m< 0 结果为负数
n<0 结果无变化 ,正负性取决于m
3)算数运算符中的类型转换问题
(1)隐式类型转换(自动转换)
(2)显式类型转换(强制类型转换) (要转换成的类型)要转换的变量或者表达式。
[img=http://img.bbs.csdn.net/upload/201508/05/1438753530_10213.png][/img]
注意事项: 一个大数加上一个特别小的数,使用float会有问题(造成数据丢失),float的有效数位只有7位,
强制类型转换是临时转换。
4)赋值运算符: 作用,把等号右边的数赋值给左边的变量(不能是常量和表达式),优先级:14,右结合
5)自增自减运算符:
前缀表达式:++x,后面必须跟变量不能是常量,先变化,再运算
后缀表达式,x--,先使用当前值,再发生变化
注意区分,表达式的值和a的值,int a=3;a++;表达式值3,a的值为4。若++a,表达式值为4
int a=3;(++a)-b+(++a),表达式的值不同操作系统会有不同,但是最终a=5,这个是确定的。
++3,和++(a+3)都是错误的,第一个运算数是常量,第二个运算数是表达式,表达式是有返回值的,相当于常量。
I++,表达式从左至右看,先看到i,表达式的值是i的值,
++i,表达式从左至右看,先看到++,表达式的值是+1后的值
6)sizeof运算符,不是函数,用法:sizeof(常量/变量),作用:计算常量、变量、数据结构在内存中占用的字节数。
小数后面加f,表示float类型,占4字节,单独的小数默认为double类型,占8字节
char 类型 占1字节,-128~127,
但是 char类型的常量存储是把字符转化成相对应的ascii码以int类型存储的,因此,占4字节。(!!!)
char类型变量,把字符的ascii码转化成二进制(1字节),进行存储。
sizeof用在常量和变量的时候可以省略括号。用在数据类型的时候不能省略
7)逗号表达式 用逗号连接表达式。
求值方式:对连接的每个表达式逐个求值,用最后一个表达式的值作为整个逗号表达式的值
注意:逗号表达式可以嵌套使用,使用是不太注重逗号表达式的值,注重的是在求值过程中,各个变量的变化(因为逗号表达式自左往右,依次运算,在求值过程中,会有变量的变化,这个需要注意)
8)关系运算符 比较两个数或者表达式之间的关系,有大于>,小于<,等于==,不等于!=,大于等于>=,小于等于<=
C语言中所有式子都有真假, 非0为真,是0为假 关系表达式的值只有两种真(1),假(0)。
优先级:第六级,>,<,>=,<=4个
第七级,==,!=2个(注意,她们是分为两个优先级的)
9)逻辑运算符
逻辑与 && 优先级11级, 表示多个条件同时成立 (同真为真,一假则假)
逻辑或 || 优先级12级,当有多个条件,只要有一个成立就可以
逻辑非 ! 优先级敏级,取反(0取反为1,非0取反为0)
逻辑运算符的短路问题:A&&B,如果A为假,B就不执行了,结果为假。A||B,如果A为真,B就不执行了,结果为真
10)三目运算符(条件运算符) 表达式1?表达式2:表达式3;
如果表达式1成立,返回表达式2的结果,否则返回表达式3的结果。
|