一、C语言运算符
考点一、C语言运算符简介
C语言的运算符范围很广,几乎把所有的基本操作都作为运算符处理。具体运算符如下表:
名称 | 运算符 |
---|
算术运算符 | +、-、*、/、% | 关系运算符 | >、>=、==、!=、<、<= | 位运算符 | >>、<<、~、&、|、^ | 逻辑运算符 | !、||、&& | 条件运算符 | ?: | 指针运算符 | &、* | 赋值运算符 | = | 逗号运算符 | , | 求字节数运算符 | sizeof | 强制类型转换运算符 | (类型名) |
按照运算对象个数,还可以分为单目运算符、双目运算符、三目运算符。
考点二、运算符的结合性和优先级
1、所有的单目运算符、条件运算符、赋值运算符及其扩展运算符,结合方向都是从右向左,其余运算符都是从左向右。
2、各类运算符优先级比较 初等运算符>单目运算符>算术运算符(先乘除后加减)>关系运算符>逻辑运算符(不包括“!”)>条件运算符>赋值运算符>逗号运算符。 初等运算符包括圆括号()、下标运算符[]、结构体成员运算符->。
考点三、逗号运算符和逗号表达式
一般形式:表达式一,表达式,二表达式,…,三表达式n 逗号表达式的求解过程是先求解表达式一,然后依次求解表达式二直到表达式n的值,整个逗号表达式的值就是表达式n的值。需要注意的是,逗号运算符是所有运算符中级别最低的。
二、算术运算符和算术表达式
考点一、基本的算数运算符
+、-、*、/、% 注意: 1、当运算对象是复数时,不同机器的运算结果也可能是不同的。
2、双目运算符两边的数值类型必须一致才能进行运算,所得结果也是相同类型的数值。
3、双目运算符两边的数值类型如果不一样,必须由系统先进行一次性转换,例如一边是整数,另一边是实数,c语言系统将首先把整数类型转化成实数类型,再进行运算,结果也是实数类型。
4、C语言规定所有实数的运算都是以双精度方式进行的,若是单精度数值,则需要在尾数后面补零转化成双精度数,我才能进行运算。
考点二、算术表达式和运算符的优先级与结合性
1、算术表达式是由算术运算符和括号将运算量连接起来的符号,c语言语法规则的表达式运算对象包括函数,常量和变量等。
2、在计算机语言中,算术表达式的求值规律与数学中四则运算的规律类似,其运算规则和要求如下: (1)在算术表达式中,可使用多层圆括号,但括号必须配对运算时从内层圆括号开始,由内向外依次计算各表达式的值。 (2)在算术表达式中,对于不同优先级的运算符可按运算符的优先级由高到低进行运算,若表达式中运算符的优先级相同,则按运算符结合方向进行运算。 (3)如果一个运算符两侧的操作数类型不同,则先利用自动转化或强制类型转换,使两者具有相同数据类型,然后进行运算。
考点三、自加自减运算符
1、自加运算符(++)和自减运算符(- -)的作用是使运算变量的值增1或减1。
2、自加自减运算符是单目运算符,其运算对象可以是整型或实数变量,但不能是常量和表达式,因为不能给常量或者表达式赋值。
3、自加自减运算符可以作为前缀运算符,也可以作为后缀运算符构成一个表达式,如++i、i++、–i、i–等都是合法的表达式。 ++i、–i:在使用i之前,先使i的值加1或者减1,再使用此时的表达式的值参加运算。 i–、i++:在使用i之后,使i的值加1或者减1,再使用此时的表达式的值参加运算。
(4)自加自减运算符的结合方向是自右向左。 如-i++:i的左边是负号运算符,右边是自加运算符,符号运算符和自加运算符的优先级是相同的,而且都是自右向左结合的,所以此表达式相当于 -(i++)。
(5)不要在一个表达式中对同一变量进行多次自加或者自减运算,这种表达式不仅可读性很差,而且不同的编译系统对它的运算结果也不同,很容易出现错误。
三、赋值运算符和赋值表达式
考点一、赋值运算符和赋值表达式
“=”称为赋值运算符,曲一般形式为:变量名=表达式。 在程序中可以多次给一个变量赋值,美肤仪是指该变量相映的,存储单元中的数据就被更新一次,内存中当前数据就是最后一次所赋值的那个数据。 注意: (1)赋值运算符的优先级别高于逗号运算符。 (2)赋值运算符(=)和等于运算符(==)的差别。 (3)赋值运算符的左侧只能是变量,而不能是常量或者表达式,右侧可以是表达式,包括赋值表达式。 (4)C语言规定最左边变量所得到的新值,就是整个赋值表达式的值。
考点二、复合的赋值运算符
1、在赋值运算符之前加上其他运算符,可以构成复合赋值运算符,其中与算数运算有关的复合运算符有+=、-=、*=、/=、%=。
两个符号之间不可以有空格,复合赋值运算符的优先级与赋值运算符相同。 2、n+=1等价于n=n+1,其他同理。即a+=b等价于a=a+b。
考点三、强制类型转换运算符与赋值运算中的类型转换
1、强制类型转换运算符 可以利用强制类型转换运算符,将一个表达式转换成所需类型,其一般形式为(类型名)(表达式),例如,(char)(x+y),将(x+y)转换为字符型。
2、赋值运算符中的类型转换 如果赋值运算符两侧的类型不一致,在赋值前,系统将自动先把右侧表达式中求得的数值按赋值号左边变量的类型进行转换(也可以用强制类型转换的方式),但这种转换仅限于某些数据之间,通常称为“赋值兼容”,对于另一些数据,如后面将要讨论的地址值,就不能赋值给一般的变量,称为“赋值不兼容”,常用的转换规则如下: (1)当实数数据赋值给整型变量时,将实数数据的小数部分截断。如“int x;x=3.2323;”x的值为5。 (2)当整型数据赋值给实型变量时,数值不变,但以浮点数形式存储到实型变量中。如“float x;x=5;”,x的结果为5.00000。 (3)当double类型数据赋值给float类型变量时,取其前面七位有效数字存放到float型变量的存储单元中,这时数值可能溢出。 (4)当字符型数据赋值给整型变量时,由于整型变量占两个字节,字符只占一个字节,需将(8位)字符数据放到整型变量低8位中,对该整型变量最高位进行符号扩展,其他位补零。 (5)当整型,短整型,长整型数据赋值给一个char类型变量时,将其低八位原封不动地送到char类型变量中,即截断。
四、位运算
考点一、位运算符和位运算
C语言提供六种位运算符,如下表:
操作符 | 含义 | 规则 |
---|
& | 按位与 | 都为1得1,其他为0 | | | 按位或 | 有1得1,都为0得0 | ^ | 按位异或 | 相同得0,不同得1 | ~ | 按位取反 | 0变1,1变0 | << | 左移 | 将一个数的二进制位全部左移若干位 | >> | 右移 | 将一个数的二进制位全部右移若干位 |
说明: (1)位运算符中除“~”以外均为双目运算符,即要求两侧各有一个运算量。 (2)运算量只能是整型或字符型数据,不能为实型数据。
这一章知识点就这些,后续做了一些相关的题,也会记录出来,先了解知识点,后续做题也会得心应手~
|