C语言运算符表达式

您所在的位置:网站首页 在c语言中赋值运算符 C语言运算符表达式

C语言运算符表达式

2023-11-19 10:24| 来源: 网络整理| 查看: 265

一、分类

C语言一共有34种运算符,10种运算类型:算术运算符(+、-、*、/、%)、关系运算符(>、>=、==、!=、、关系运算符>逻辑运算符(不包括!)条件运算符>赋值运算符>逗号运算符

三、算术运算符合和算术表达式

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,再判断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).,右移,将一个数的二进制位全部右移若干位。不同系统下右移的结果不同,而在mac系统下:正数右移1位,相当于除以2,右移n位,相当于除以2的n次方(移动时,空缺的高位补零,移出的位数舍弃);负数

2.说明:

(1).位运算符中除“~”以外,均为双目运算符,即要求两侧各有一个运算量

(2).运算量只能是整型或字符型数据,不能为实型数据

(3).位运算符的操作对象是数据所代表的补码

3.位常见操作:

(1).求a的第n位(0位起)是1还是0

     解:让a&(13) &&  ((!(-5)) > 2),结果为0

 

七、条件运算符

1.条件运算符是一个三目运算符。

2.格式:(条件判断)?操作1:操作2

3.作用:如果条件表达式为真,则执行操作1,条件表达式为假,则执行操作2

4.优先级:条件运算符高于赋值运算符,但低于逻辑运算符、关系运算符和算术运算符

例:int a = 5?10:2;

获得a、b中的最大数

获得a、b、c中的最大数

八、指针运算符

1.&取地址运算符,求得某个变量地址

2.*指针运算符,求得所指地址的空间里的值

九、赋值运算符和赋值表达式

1.C语言中,“=”称作赋值运算符,作用是将一个数值赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。

2.简单赋值

(1).一般形式:变量名=表达式

(2).注意:

1>.在程序中可以多次给一个变量赋值,每赋一次值,与该变量相应的存储单元的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。即,最左边变量所得到的新值是整个赋值表达式的值。

2>.赋值运算符的优先级别高于逗号运算符。

3>.注意赋值运算符“=”和等于运算符“==”的差别

4>.赋值运算符的左侧只能是变量,而不能使常量或表达式。右侧可以是表达式,包括赋值运算表达式。“a=b=1+1”是对的,而“a=1+1=b”是错的(原因:由于赋值运算表达式的结合方式是从右到左,其第一个赋值表达式的左侧是常数,所以错误)

3.复合赋值

(1).在赋值运算符之前加上其他运算符可以构成复合赋值运算符。其中与算术运算有关的复合运算符有+=、-=、*=、/=、和%=等。

(2).注意:

1>.两个符号之间不可以有空格

2>.复合赋值运算符的优先级与赋值运算符的相同。表达式n+=1等价于n=n+1,作用是去变量n中的值增1再赋值给变量n,其他复合赋值运算符的运算规则以此类推。

例:求表达式a+=a-=a*a的值

解:先进行“a-=a*a”运算,相当于a=a-a*a=12-144=-132

再进行“a+=-132”运算,相当于a=a+(-132)=-132-132=-264

3>.如果赋值运算符两侧的类型不一致,在赋值前系统将自动先把右侧的值或通过表达式求得的数值按赋值号左边变量的类型进行转换。

4.自增自减运算

(1).自加运算符“++”和自减运算符“--”的作用是使运算变量的值增1或减1。

(2).自加、自减运算符是单目运算符。其运算对象可以是整型或实型变量,但不能是常量和表达式,因为不能给常量或者表达式赋值。

(3).自加、自减运算符可以作为可以作为前缀运算符,也可以作为后缀运算符构成一个表达式,如++i、--i、i++、i--等都是合法的表达式。

1>.无论是前缀还是后缀运算符,一定会有i的值加1或则减1这一步。

2>.++i、--i:在使用i之前,先使i的值加1或减1,再使此时的表达式的值参加运算。(即加前或则减前取值)

3>. i++、i--:在使用i之后,使i的值加1或减1,再使此时的表达式的值参加运算。(即加后或则减后取值)

4>.自加自减运算符的结合方向:自右向左

例:-i++

解:i的左边是负号运算符,右边是自加运算符,负号运算符和自加运算符的优先级是相同的,而且都为“自右向左”结合的,所以此表达式相当于-(i++)。若i的初值为2,则表达式-(i++)的值为-2,i的值为3.

十、逗号运算符和逗号表达式

1.逗号“,”就是逗号运算符,而用逗号运算符将几个表达式连接起来,如:a=b+c,b=a*a,c=a+b,称为逗号表达式

2.一般形式:

表达式1,表达式2,表达式3,…表达式n

3.结合方向:从左到右

例:3,5->5

例:c=a+b,a=2,b=3->c的值不准确,是一个随机值,因为逗号表达式是从左向右结合的

3.逗号表达式的求解过程是:先求表达式1,然后依次求解表达式2,直到表达式n的值。整个逗号表达式的值就是表达式n的值。

4.注意:逗号运算符是所有运算符中级别最低的。

十一、求字节运算符(sizeof)

1.sizeof()的作用是用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。

2.基本形式:

(1).sizeof( 变量\常量 );

(2).sizeof 变量\常量;

(3).sizeof( 数据类型 )

(4)   .注意其形式没有sizeof 数据类型

十二、强制类型转换运算符和赋值运算中的类型转换

1.强制类型转换运算符

(1).作用:可以利用强制类型转化运算符将一个表达式转换成所需类型。

(2).一般形式:(类型名)(表达式);例如:(char)(x+y);(将(x+y)的值强制转换成字符型)

2. 赋值运算中的类型转换

(1).如果赋值运算符两侧的类型不一致,在赋值前系统将自动先不右侧表达式的数值按赋值号左边变量的类型进行转换(也可以用强制类型转换的方式),但这种转换仅限于某些“赋值兼容”的数据之间。对于另一些“赋值不兼容”的数据,如:地址值,就不能赋值给一般变量。

(2).常用的转换规则:

1>.当实型数据赋值给整型变量时,将实型数据的小数部分截断,只取整数部分

例:int x;执行“x=5.21;”后,x的值为5

2>.当整型数据赋值给实型变量时,数值不变,但以浮点形式存储到实型变量中

例:float x=45;输出x的结果为45.00000

3>.当double类型数据赋值给floa型变量是,取前面7位有效数字,存放到float型变量的存储单元中,这是数值可能溢出

4>.当字符型数据赋值给整型变量时,由于整型变量占4个字节,而字符只占一个字节,需将字符数据(8位)放到整型变量低8位中,对给该整型变量最高位进行符号扩展,其他位补零。

5>.当整型、短整型、长整型数据赋值给一个char类型变量时,将其低8位原封不动地送到char类型变量中(即截断)。

十三、其他(下标[]、分量、函数)

1.下标[]运算符,一般形式a[i],即*(a+i)。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3