一、分类
C语言一共有34种运算符,10种运算类型:算术运算符(+、-、*、/、%)、关系运算符(>、>=、==、!=、<、<=)、位运算符(>>、<<、==、!=、<、<=)、逻辑运算符(!、||、&&)、条件运算符、(?:)指针运算符(&、*)、赋值运算符(=)、逗号运算符(,)、求字节运算符(sizeof)、强制类型转换运算符((类型名))、其他(下标[]、分量、函数) ;若按参与运算的对象个数,C语言运算符可分为单目运算符(如!)、双目运算符(如+、-)和三目运算符(如?:)
二、运算符的结合性和优先级
1. 运算符的结合性
在C语言的运算符中,所有的单目运算符、条件运算符、赋值运算符及其扩展运算符,结合方向都是从右向左,其余运算符的结合方向是从左向右。
2.运算符的优先级
初等运算符(圆括号()、下标运算符[]、结构体成员运算符->)>单目运算符>算术运算符(先乘除后加减)>关系运算符>逻辑运算符(不包括!)条件运算符>赋值运算符>逗号运算符
三、算术运算符合和算术表达式
1.基本的算数运算符
(1). +加法运算或正值运算符
4+4、+5、
(2).- 减法运算或负值运算符
6-4、-10、-29
(3). *乘法运算
注意符号,不是x,而是*
(4). /除法运算
注意符号,不是÷,也不是\,而是/
整数除于整数,还是整数。1/2的值是0,这个并不是二分之一, 不会四舍五入,直接截断取值。
(5)%取余运算
取余:即两个整数相除之后的余数
注意:%两侧只能是整数,正负性取决于%左侧的数值
2.注意:
(1).当运算对象是负数时,不同机器的运算结果也可能是不同的。
(2).双目运算符两边的数值类型必须一致才能进行运算,所得结果也是相同类型的数值。
(3).双目运算符两边的数值类型如果不一致,必须由系统先进行一致性转换。
转换规则:char->short->int->unsigned->long->double->float
(4).C语言规定,所有实数的运算都是以双精度方式进行的,若是单精度数值,则需要在尾数后面补零,转换长双精度数才能进行运算。
3.算术表达式
(1).算术表达式是用算术运算符和括号将运算量(也称操作数)连接起来的、符合C语言语法规则的表达式。其中运算对象包括函数、常量、变量。
(2).算术表达式的运算规则:
A.在算术表达式中,可以使用多层圆括号,但括号必须配对。运算时从内层括号开始,由内向外依次计算各表达式的值。
B.在算术表达式中,对于不同优先级的运算符,可按运算符的优先级由高到低进行运算,若表达式中运算符的优先级相同,则按运算符的结合方向(算术运算符的结合方向是从左
到右)进行运算。
C.如果一个运算符两侧的操作数类型不同,则先利用自动转换或强制转换,使两者具有相同数据类型,然后再进行运算。
四、关系运算(比较运算)和关系表达式
1.关系运算符:
C语言提供了6种关系运算符:>(大于)、>=(大于等于)、==(等于)、!=(不等于)、<(小于)、<=(小于等于)
2.结合性:自左向右:4>3>2,先判断4是否大于3,再判断1是否大于2
3.优先级:关系运算符中(==、!=)的优先级相等,(<、<=、>、>=)的优先级相等,且前者的优先级低于后者:2==3>1,先判断3是否大于1,再判断2是否等于1。
4.关系表达式
(1).定义:由关系运算符连成的表达式。关系运算符的两边可以是C语言中任意合法的表达式。
(2).关系运算符的结果是一个整数值——“0或者1”,用非零值表示“真”,用零值表示“假”
(3).当关系运算符两边值的类型不一致时,系统将自动转化。
5.注意:
A.当关系运算符两边值的类型不一致时,如一边是整型,另一边是实型,系统将自动将整型转化为实型数,然后再进行比较。
B.若复合语句中有关系运算式和算术运算式时,因为算术运算符的优先级高于关系运算符,所以应该先算出算术表达式的值再去判断关系表达式的值。
五、位运算符
1.C语言提供了6种运算符
(1).&,按位与,规则:若两个相应额二进制位都为1,则该位的结果为1,否则为0.
(2).|,按位或,规则:两个相应的二进制位中只要有一个为1,则该位的结果为1,否则为0.
(3).^,按位异或,规则:若两个二进制位相同,则结果为0,不同则为1
(4).~,安慰求反,规则:安慰取反,即0变1,1变0
(5).<<,左移,将一个数的二进制位全部左移若干位,左移1位相当于乘2,左移n位,相当于乘2的n次方
(6).>>,右移,将一个数的二进制位全部右移若干位。不同系统下右移的结果不同,而在mac系统下:正数右移1位,相当于除以2,右移n位,相当于除以2的n次方(移动时,空缺的高位补零,移出的位数舍弃);负数
2.说明:
(1).位运算符中除“~”以外,均为双目运算符,即要求两侧各有一个运算量
(2).运算量只能是整型或字符型数据,不能为实型数据
(3).位运算符的操作对象是数据所代表的补码
3.位常见操作:
(1).求a的第n位(0位起)是1还是0
解:让a&(1<<n)==1,则第n位是1
让a&(1<<n)==0,则第n位是0
(2).通过位运算,将第n位置成1
解:通过运算a|=(1<<n),即可得
(3).将a的第三位置成0
解:通过运算a&=~(1<<n),即可得
(4).将a的第n位取反
解:通过运算a^=1<<n,即可得
六、逻辑运算符和逻辑表达式
C语言提供了3中逻辑运算符:
1.&& 逻辑与
(1). 使用格式:
条件A && 条件B;
(2). 运算结果:
只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。因此,条件A或条件B只要有一个不成立,结果都为0,也就是“假”
(3).运算过程:
总是先判断条件A是否成立
如果条件A成立,接着再判断条件B是否成立:如果条件B成立,“条件A && 条件B”的结果
就为1,即“真”,如果条件B不成立,结果就为0,即“假”
如果条件A不成立,就不会再去判断条件B是否成立:因为条件A已经不成立了,不管条件B如何,“条件A && 条件B”的结果肯定是0,也就是“假”(逻辑与的“短路的运算”)
(4).注意:
1>.若想判断a的值是否在(3, 5)范围内,千万不能写成3<a<5,因为关系运算符的结合方向为“从左往右”。 比如a为2,它会先算3<a,也就是3<2,条件不成立,结果为0。再与5比较,即0<5,条件成立,结果为1。因此 3<a<5的结果为1,条件成立,也就是说当a的值为2时,a的值是在(3, 5)范围内的。这明显是不对的。正确的判断方法是:(a>3) && (a<5)
2>.C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑与也适用于数值。比如 5 && 4的结果是1,为“真”;-6 && 0的结果是0,为“假”
2.|| 逻辑或
(1).使用格式:
条件A || 条件B;
(2). 运算结果:
当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。
c语言中逗号表达式的用法(3).运算过程:
总是先判断条件A是否成立
如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”(逻辑或的“短路运算”)
如果条件A不成立,接着再判断条件B是否成立:如果条件B成立,“条件A || 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”
例:逻辑或的结合方向是“自左至右”。比如表达式 (a<3) || (a>5)
若a的值是4:先判断a<3,不成立;再判断a>5,也不成立。因此结果为0
若a的值是2:先判断a<3,成立,停止判断。因此结果为1
因此,如果a的值在(-∞, 3)或者(5, +∞)范围内,结果就为1;否则,结果就为0
(4).注意:
C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑或也适用于数值。比如 5 || 4的结果是1,为“真”;-6 || 0的结果是1,为“真”;0 || 0的结果是0,为“假”。
3.! 逻辑非
(1).使用格式:
! 条件A;
(2).运算结果:
其实就是对条件A进行取反:若条件A成立,结果就为0,即“假”;若条件A不成立,结果就为1,即“真”。也就是说:真的变假,假的变真。
例:逻辑非的结合方向是“自右至左”。比如表达式 ! (a>5)
若a的值是6:先判断a>5,成立,再取反之后的结果为0
若a的值是2:先判断a>3,不成立,再取反之后的结果为1
因此,如果a的值大于5,结果就为0;否则,结果就为1
(3). 注意:
1>.可以多次连续使用逻辑非运算符:!(4>2)结果为0,是“假”,!!(4>2)结果为1,是“真”,(4>2)结果为0,是“假”
2>.C语言规定:任何非0值都为“真”,只有0才为“假”。因此,对非0值进行逻辑非!运算的结果都是0,对0值进行逻辑非!运算的结果为1。!5、!6.7、!-9的结果都为0,!0的结果为1
4.结合性:自左向右
5.优先级
逻辑运算符的优先级顺序为: 小括号() > 负号 - > ! > 算术运算符 > 关系运算符 > && > ||
例1:表达式!(3>5) || (2<4) && (6<1) :先计算 !(3>5)、(2<4)、(6<1),结果为1,式子变为1 || 1 && 0,再计算1 && 0,式子变为1 || 0,最后的结果为1
例2:表达式3+2<5||6>3 等价于 ((3+2) < 5) || (6>3),结果为1
例3:表达式4>3 && !-5>2 等价于 (4>3) && ((!(-5)) > 2) ,结果为0
七、条件运算符
1.条件运算符是一个三目运算符。
2.格式:(条件判断)?操作1:操作2
3.作用:如果条件表达式为真,则执行操作1,条件表达式为假,则执行操作2
4.优先级:条件运算符高于赋值运算符,但低于逻辑运算符、关系运算符和算术运算符
例:int a = 5?10:2;
获得a、b中的最大数
获得a、b、c中的最大数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论