admin 管理员组

文章数量: 1086019


2023年12月21日发(作者:keil5怎么使用汇编语言)

C语言运算符详解一、算术运算符+加法运算符应有两个量参与加法运算a=b+c—减法运算符(也可作负值运算符)a=b-c*乘法运算符/除法运算符注意:“/”参与运算量均为整型时,结果也为整型,舍去小数部例如:6/2=3,7/2=3%求余运算符(求模运算符),求余运算的值为两数相除后的余数。例如:10%3值为1.注意:求余运算“%”要求参与求余运算的量均为整型。++自增1运算其功能是使变量的值自增1.——自减1运算其功能是使变量的值自减1.可以有以下几种形式:i++意思是:i参与运算后,i的值再自增1。I--意思是:i参与运算后,i的值再自减1。++i意思是:i自增1后,再参与运算。--i意思是:i自减1后,再参与运算。分二、关系运算符与表达式(用于比较运算)>大于<小于==等于>=大于等于<=小于等于!=不等于当两个表达式用关系运算符连接起来时就成为了关系表达式,通常关系运算符是用来判断某个条件是否成立。当条件成立运算的结果为真;当条件不成立运算的结果为假。用关系运算符的结果只有“0”和“1”两种。例如:chara,b,c;a=5,b=7;C=(5<7)//因为5小于7所以条件成立,结果为真。即c=1;C=(5>7)//因为5小于7,所以条件不成立,结果为假,即c=0;C=(5=7)//因为5小于7,所以条件不成立,结果为假,即c=0;三、逻辑运算符与表达式:&&逻辑与条件式1&&条件式2(两个条件均为真时运算结果为真,否则为假)||逻辑或条件式1||条件式2(当两个条件任其一为真时,结果为真;当两个是假时,结果为假)!逻辑非把当前的结果取反,作为最终的运算结果。条件同

四、位操作运算符与表达式:&按位相与均为1时,结果为1|按位相或有1则结果为1,均为0时结果为0~按位取反^按位异或两个变量相同时,结果为0;两个变量不同时,结果为1.<<左移把第一个变量的二进制位左移第二个变量指定的位数,其左移出的数丢弃;左移,不管是有符号数还是无符号数,都是在相应的位补“0”例如:a=022,a<<200100010左移2位,为10001000结果为:a=0x88a=0x52a<<401010010左移4位,为00100000结果为:a=0x20>>右移把第一个变量的二进制位右移第二个变量指定的位数,其右边移除的数丢弃;右移:如果是无符号数,在相应的位补“0”,如果是有符号数,则要在其左端补入原来数据的符号位(即保持原来数据符号的不变)。例如:a=0x82,a>>210000010右移2位为00100000结果为:a=0x20a=0x82,(a为有符号数)a>>410000010右移4位为11111000结果为:a=0xf8五、赋值运算符(用于赋值运算)=+=—=*=/=%=&=|=^=>>=<<=赋值(简单赋值)加法赋值减法赋值乘法赋值除法赋值求余赋值按位与赋值按位或赋值异或赋值右移赋值左移赋值变量=表达式X=a+b将表达式(a+b)的值赋给变量X变量双目运算符=表达式关于简单赋值:如果在运算的表达式中,赋值运算符两边的数据类型不同,系统将自动进行类型转换。即将赋值号右边的类型转换为左边的类型。具体规定如下:1.实型数赋予整型数:舍去小数部分。2.整型数赋予实型数:数值不变,但将以浮点数的形式存放,即增加小数部分(小数部分的值为“0”)3.字符型数赋予整型数:由于字符型数为一个字节,而整型数为两个字节。字符型数赋值于低位,高位则补“0”。4.整型数赋值于字符型数:只把低八位赋予字符量,而高位则丢弃。复合运算符:复合运算符的作用是先将复合运算符右边表达式的结果与左边的变量进行算术运算,然后再将最终结果赋予左边的变量。所以复合运算要注意:1.复合运算符左边必须是变量。2.复合运算符右边的表达式计算完成后才能参与复合赋值运算。复合运算符常用于某个变量自身的变化,尤其是当左边的变量名很长时,使用复合运算符书写更方便。六、特殊运算符与表达式:?:条件运算符用于条件求值运算符

是一个三目运算符,其功能是将三个表达式连接起来成为一个表达式,合法的表达形式是:逻辑表达式?表达式1:表达式2条件表达式的作用简单来说就是根据逻辑表达式的值来选择使用那个表达式的值。当逻辑表达式的值为真时(非0值),整个表达式的值为表达式1的值;当逻辑表达式的值为假(0值),整个表达式的值为表达式2的值。例:如有a=1,b=2,在程序当中比较两个值的大小,把最小的值放入y中,程序可以这样写:if(a

例题3:若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是A)1B)2C)2.0D)2.5分析:该表达式是一个逗号表达式,所以先运算x=1,结果变量x中的值为1.0,然后运算y=x+3/2,其结果是变量y中的值为2.0(这个运算过程可参阅本专题的“整数除法的注意事项”——整数相除,舍入法取整数部分),注意此时表达式y=x+3/2的值即等于变量y的值为2.0。最后,整个逗号表达式的值应该等于最后一个表达式的值2.0,所以,正确答案是C)。例题4:若t为double类型,表达式t=1,t+5,t++的值是A)1B)6.0C)2.0D)1.0分析:该题的表达式也是一逗号表达式,运算过程同例题1。需要注意的是,其中的第二个表达式(t+5)对整个表达式的运算结果不产生任何影响,因为它没有改变变量x的值(x的值仍为1.0),最后一个表达式(t++)的值为变量x进行自增运算前的值1.0,所以整个表达式的值为1.0。例题5:有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是A)3B)4C)5D)有语法错误分析:C语言规定,函数调用时实参与实参之间是用逗号隔开的,所以,本题的函数调用语句中包含3个实参,其中第一个实参是rec1,第二个实参是rec2+rec3,第三个实参是(rec4,rec5),这里的第三个实参就是一个逗号表达式,根据逗号表达式的运算规则,第三个实参的值应该等于rec5的值。注:这是2000年9月二级C考试中的一道选择题。例题6:有如下函数调用语句是A)3B)4C)5D)6正确答案应该是A)。*&指针运算符指针运算符用于取内容运算符用于取地址运算符fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数取内容和地址的一般形式分别为:变量=*指针变量指针变量=&目标变量取内容运算是将指针变量所指向的目标变量的值赋给左边的变量;取地址运算是将目标变量的地址赋给左边的变量。要注意的是:指针变量中只能存放地址(也就是指针型数据),一般情况下不要将非指针类型的数据赋值给一个指针变量。Sizeof求字节数运算符用于计算数据类型所占的字节数有点像函数,却又不是。sizeof是用来求数据类型、变量或是表达式的字节数的一个运算符,但它并不像"="之类运算符那样在程序执行后才能计算出结果,它是直接在编译时产生结果的。它的语法如下:sizeof(数据类型)sizeof(表达式)下面是两句应用例句,程序大家可以试着编写一下。printf("char是多少个字节?½;字节n",sizeof(char));printf("long是多少个字节?½;字节n",sizeof(long));结果是:char是多少个字节?1字节long是多少个字节?4字节

优先级与结合性优先级:C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。另外在C语言里,没有前置后置之分,因为++--是右结合所以右侧优先运算,表现为"操作数后置优先级比较高"的假象,前置和后置的区分是因为运算符重载而后加入C++的接下来是算术运算符,*、/、%的优先级当然比+、-高了。移位运算符紧随其后。其次的关系运算符中,<<=>>=要比==!=高一个级别,不大好理解。所有的逻辑操作符都具有不同的优先级(单目运算符除外,!和~)逻辑位操作符的"与"比"或"高,而"异或"则在它们之间。跟在其后的&&比||高。接下来的是条件运算符,赋值运算符及逗号运算符。在C语言中,只有4个运算符规定了运算方向,它们是&&、||、条件运算符及赋值运算符。&&、||都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如a=0&&b;&&运算符的左边位0,则右边表达式b就不再判断。在条件运算符中。如a?b:c;先判断a的值,再根据a的值对b或c之中的一个进行求值。赋值表达式则规定先对右边的表达式求值,因此使a=b=c=6;成为可能。优先级等级口诀及注释1.优先级等级口诀圆方括号、箭头一句号,自增自减非反负、针强地址长度,乘除,加减,再移位,小等大等、等等不等,八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。其中“,”号为一个等级分段。2.优先级等级注释“圆方括号、箭头一句号”指的是第15级的运算符。其中圆方括号很明显“()、[]”,箭头指的是指向结构体成员运算符“->”,句号指的是结构体成员运算符“.”;

“自增自减非反负、针强地址长度”指的是第14级的运算符。其中非指的是逻辑运算符“!”,反指的是按位取反运算符“~”,负指的是负号运算符“-”,针指的是指针运算符“*”,强指的是强制类型转换运算符,地址指的是地址运算符“&”,长度指的是长度运算符“sizeof”;“乘除,加减,再移位”移位指的是左移运算符“<<”和右移运算符“>>”,其中除法还包括了取余运算符“%”;“小等大等、等等不等”指的是第10级到第9级的运算符:<、<=、>和>=,等等指的是等于运算符==,不等指的是不等于运算符!=“八位与,七位异,六位或”其中八位与指的是第8级的按位与运算符“&”,七位异指的是第7级的按位异或运算符“^”,六位或指的是第6级的按位或运算符“|”;“五与,四或”指的是第5级、第4级的逻辑与运算符“&&”和逻辑或运算符“||”;“三疑,二赋,一真逗”指的是第3级到第1级的运算符。其中,三疑指的是条件运算符“?:”(三有双重含义:即指优先级别是三,它的运算符类型也是三目,疑也取“?”之意),二赋指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|=,一真逗指的是第1级的“,”运算符,真字只是为了语句需要罢了。由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符),所以这个口诀不能完全实用于C++.但是应该能够兼容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的!


本文标签: 运算符 表达式 赋值 变量 运算