运算符:就是表示某种运算功能的符号。
按操作功能运算符大致可分为:算术运算符、关系运算符、逻辑运算符、按位运算符以及其它运算符如赋值运算符、条件运算符、逗号运算符等。
表达式:是由操作数和运算符组成的序列,它和算术中四则混合运算类似,其中操作数
可以是常量也可是变量。
优先级:各类运算符在一个表达式中运算的先后顺序。如表达式2+3*5首先进行乘法运算,然后进行加法运算。
结合性:当一个运算量两侧的运算符优先级相同时运算的结合方向。如2+3-1, 其加减的结合性是自左向右,因此先做加法,再进行减法运算。
记不住,找规律。
结合性:除单目运算符、赋值运算符和条件运算符是右结合性外,其它都是左结合性。
优先级:为“单目高于双目,双目高于三目,三目高于赋值”。
双目运算中的10个优先级的先后顺序可记忆为:“算术运算符高于移位运算符, 移
位运算符高于关系运算符,关系运算符高于位逻辑运算符(不包括单目位逻辑运算符),
位逻辑运算符高于逻辑运算符”
表达式求值
(1)先按运算符的优先级高低次序执行。例如,先乘除后加减。.
(2)如果在一个操作数两侧的运算符的优先级相同,则按C语言规定的结合方向(结合性)
进行。
运算符 | 含义 | 举例 | 结果 |
* | 乘法运算符 | a*b | a和b的乘积 |
/ | 除法运算符 | a/b | a除以b的商 |
% | 求余运算符 | a%b | a除以b的余数 |
+ | 加法运算符 | a+b | a和b的和 |
- | 减法运算符 | a-b | a和b的差 |
算术表达式:使用算术运算符和括号将运算量连接起来的式子
%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数
两个实数相除的结果是双精度实数,两个整数相除的结果为整数
(1)关于除法运算
1/2=0,但1.0/2=0.5(前者都是整数,结果也为整数;后者1.0为双精度实数,结果也为双精度实数)类型不同的数进行运算,其结果按类型优先级高的类型定(基本按照数据类型所占的字节数的大小定的)
(2)关于求余数运算
结果的符号与前一操作数的符号相同
关系表达式:用关系运算符连接的两个表达式构成。关系运算符实际上就是比较运输算符
·一个=是赋值运算符
·参与关系运算的两个运算量可以是任意类型的数据
·当比较结果成立时,结果为1;当比较结果不成立时,结果为0.
逻辑表达式:用逻辑运算符连接两个表达式构成。参与逻辑运算的操作数叫逻辑量。逻辑量可以是整型、实型、字符型和指针类型等多种类型。
逻辑运算中,非零当做真,0作为假,因此任何类型的数据都可以参与到逻辑运算,如上图举例
C语言中,逻辑运算结果采用数值1表示真,数值0表示假
A | B | A&&B |
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
A | B | A||B |
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
A | !A |
1 | 0 |
0 | 1 |
优先级:! >&& > ||
综合性:自左至右
·数学上的区间: 2≤X≤8,在C语言中必须写成2<=X && X<=8, 这是根据C语言表达式的运算优先级和结合性决定的。
·在一个&&表达式中,如果&&的左侧为假,则C语言 不会在判断右侧(即假与任何都为假)。同理,一个||表达式中,如果||左侧为真,C语言不会判断右侧的真假(即真或任何都为真)。
例如:
练习 :
判断year是否为闰年,能被4整除但不能被100整除,或能被400整除
(year % 4 == 0 year % 100 != 0 || year % 400 == 0)
位运算是对整型数据进行的运算,而且符号位需要参与运算。位运算主要用于编写系统软件,完成汇编语言能够完成的一些功能。
自增和自减是两个算术运算符,比其他算术运算符特殊,自增自减运算符是一元运算符,作用是使变量的值加1或减1,只能对变量进行运算
++i ,--i 在使用i之前,先使i的值加/减1,先增减,后运算
i++ ,i-- 在使用i之后,使i的值加/减1,先运算,后增减
++i 是先执行i=i+1,再使用i的值;而i++是先使用i的值,再执行i=i+1
建议谨慎使用++和--运算符,只用最简单的形式,即i++ ,i--,且把它们作为单独的表达式
说明:
(1)自增、自减运算,常用在循环语句中,使循环变量加/减1;以及指针变量中,使指针指向下/上一个地址。
(2)自增、自减运算符,不能用于常量和表达式。
如,8++、--(x+y)都是非法的
赋值运算符:“=”
赋值表达式是由赋值运算符连接左边一个变量和右边一个表达式构成。
【变量】=【表达式】;
优先级: ! >算术 > 关系 >&&和||>赋值
结合性:自右至左
表达式可以是任意额表达式,包括算术表达式、逻辑表达式等,表达式甚至可以使是一个变量或另一个赋值表达式
int a=10,b=20;
int c;
c=a=b+5; //先算b+5=25,接着a=b+5=25,最后c=a=25
注意:格式左边一定是一个变量,格式右边可以是任意的表达式。表达式计算结果的数据类型应当和变量的数据类型相同。如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字型时,系统自动地将表达式的值转换成被赋值变量(即将右侧转换为左侧的)的数据类型,然后再赋值给变量。
优先级:与=是同一优先级
结合性:自右至左
逗号运算符: ,
作用:将几个表达式隔开并以此计算。
优先级:最低
结合性:自左至右
整个表达式的值:最后一个表达式的值
a=3*5,a*4,a+1; 首先计算表达式a=3*5,然后计算a*4,最后计算a+1。最终a被赋值为15,整个表达式的值为16。求解过程:自左至右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值。
第五行赋值于加的右边使用括号,这是由于逗号运算符的优先级最低。若没有括号,此行将会把num=2+2视作一个表达式。
条件运算符: ?:
作用:判断一个逻辑表达式的结果,如果为真则指定执行某个表达式,如果为假则指定执行另外的表达式。条件表达式的实质就是起程序控制作用。
表达式1?表达式2:表达式3
求值规则:先求解表达式1的值,若为真(非0),求解表达式2,并把表达式2的值作为整个条件表达式的值;若表达式1的值为假(0),求解表达式3,并把表达式3的值作为整个条件表达式的值。
优先级:逻辑>条件>赋值
结合性:自右至左
如:
int max,a=5,b=3;
max=a>b?a:b;
由于优先级,等价于max= (a>b?a:b),a>b成立,则a作为整个条件表达式的值,因此max=5。
由于15/10为两整数相除,其结果也为整数,即1.5的整数部分1
sizeof()运算符是一个单目运算符,用于计算机一个某种类型的运算量所占用的字节数。