第2章 运算符与表达式[考点一] C运算符简介[考点二] 运算符的结合性和优先级(1) 在C语言的运算符中,所有的单目运算符、条件运算符、赋值运算符及其扩展运算符结合方向都是从右向左,其余运算符的结合方向是从左向右...
第2章 运算符与表达式
[考点一] C运算符简介
[考点二] 运算符的结合性和优先级
(1) 在C语言的运算符中,所有的单目运算符、条件运算符、赋值运算符及其扩展运算符结合方向都是从右向左,其余运算符的结合方向是从左向右。
(2) 各类运算符优先级别的比较
初等运算符>单目运算符>算术运算符>关系运算符>逻辑运算符>条件运算符>赋值运算符>逗号运算符
说明:以上优先级别由左到右递减,初等运算符优先级最高,逗号运算符优先级最低。
[考点三] 强制类型转换运算符
可以利用强制类型转换符将一个表达式转换成所需类型,其一般形式为:
[考点四] 逗号运算符和逗号表达式
用逗号运算符将几个表达式连接起来称为逗号表达式。
逗号表达式的求解过程是:先求解表达式1,然后依次求解表达式2,直到表达式n的值。整个逗号表达式的值就是表达式n的值。需要注意的是,逗号运算符是所有运算符中级别最低的。
[考点五] 基本的算术运算符
需要说明的是:两个整数相除的结果为整型,如果两个数中有一个数为实数,则结果为double型。
[考点六] 算术表达式和运算符的优先级与结合性
算术表达式是用算术运算符和括号将运算量连执着起来的,符合C语言语法规则的表达式。运算对象包括函数、常量和变量等。
在计算机语言中,算术表达式的求值规律与数学中的四则运算的规律类似,其运算规则和要求如下:
(1) 在算术表达式中,可使用多层圆括号,但括号必须配对。运算时从内层圆括号开始,由内向外依次计算各表达式的值。
(2) 在算术表达式中,对于不同优先级的运算符,可按运算符的优先级由高到低进行运算,若表达式中运算符的优先级相同,则按运算符的结合方向进行运算。
(3) 如果一个运算符两侧的操作数类型不同,则先利用自动转换或强制类型转换,使两者具有相同类型,然后进行运算。
[考点七] 自增自减运算符
作用:使变量的值增1或减1。
[考点八] 赋值运算符和赋值表达式
赋值符号“=”就是赋值运算符,作用是将一个数据赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。
在程序中可以多次给一个变量赋值,每赋一次值,与它相应的存储单元中的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。
[考点九] 复合的赋值运算符
在赋值运算符之前加上其他运算符就可以构成复合赋值运算符。
[考点十] 赋值运算中的类型转换
如果赋值运算符两侧的数据类型不一致,在赋值前系统将自动先把右侧表达式求得的数值按赋值号左边变量的类型进行转换,但这种转换仅限于某些数据之间,通常称为“赋值兼容”。
常用的转换规则:
(1)当实型数据赋值给整型变量时,将实型数据的小数部分截断。
(2)当整型数据赋给实型变量时,数值不变,但以浮点数形式存储到实型变量中
(3)当double尖型数据赋值给float型变量时,取其前面7位的有效数字,存放到float型变量的存储单元中,这时数值可能溢出。
(4)当字符型数据赋值给整型变量时,由于整型变量占两个字节,则字符只占一个字节,只需将字符数据放到整型变量低8位中,对该整型变量最高位进行符号扩展,其他位补零。
(5)当整型、短整型、长整型数据赋值给一个char类型变量时,将低8位原封不动地送到char类型变量中。
[考点十一] 位运算符和位运算
在计算机中,数据都是以二进制数形式存放的,位运算就是指对存储单元中二进制位的运算。
C语言提供了6种位运算符
说明:
(1)位运算中除“-”以外,均为双目运算符,要求两侧各有一个运算量
(2)运算量只能是整型或字符型数据,不能为实型数据
来源:-计算机二级考试
满意答案dtexoy2014.03.14采纳率:48%等级:9已帮助:113人结合性是规定运算符与运算数组合成表达式的结合方向。因为运算符是有优先级别的,表达式的运算应该是先按运算符的优先级由高到低的顺序,结合运算数进行...
满意答案
dtexoy
采纳率:48%等级:9
已帮助:113人
结合性是规定运算符与运算数组合成表达式的结合方向。因为运算符是有优先级别的,表达式的运算应该是先按运算符的优先级由高到低的顺序,结合运算数进行计算,当遇到同级别运算符或者是符号一样但运算目数不同时,就要用到运算符的结合性。
例如:X=-B+C 或X=A-B+C与X=A-B*C两个表达式计算时是这样的
对于X=-B+C,表达式运算时是这样的,先数据栈读入X,符号栈读入=(赋值运算符),因为=是双目运算符,还要读入数据,所以继续向后读表达式;又读到-号,不是数据,而且-号的运算级别高于=号,所以-号进入符号栈,继续向后读表达式,读到数据B进入数据栈,这时候-B就符合负号运算符的自右向左结合的单目运算,就进行求值运算,符号栈中-号出栈,与数据栈中B结合成-B,-B就变为一个新的运算数据进入数据栈;后面继续读入+号,它是双目运算符后面还要读入一个运算数据,C就读入了数据栈,后面没有运算符再读入,表达式结束,那么就进行符号栈+号和数据栈中C和-B的值相加,将结果存入数据栈中,符号栈中+出栈;符号栈中还有=号,它和数据栈中的结果与X形成赋值的自右向左双目结合运算,表达式的结果就此运算完毕。
对于X=A-B+C与X=A-B*C两个表达式计算时,前面X=A-B过程是相同的,只是后面,由于*号比+号的运算级别高,所以表达式X=A-B*C中要先算B*C的结果,在一步一步回退进行A-和X=的运算。而表达式X=A-B+C中+号与-同级别,所以当满足运算条件时就先进行A-B运算,然后进行+C和X=的运算。
不知道以上的说明,是否能让你明白C语言中运算符结合性和表达式求值的过程。
00分享举报
CSS布局HTML小编今天和大家分享c语言中关系运算符,逻辑运算符等等各种运算符的c语言运算符号 1级优先级 左结合 () 圆括号 [] 下标运算符 -> 指向结构体成员运算符 . 结构体成员运算符 2级优先级 右结合 。 逻辑...
C语言关系运算符包含哪几个? 它们的优先级如何?
CSS布局HTML小编今天和大家分享c语言中关系运算符,逻辑运算符等等各种运算符的c语言运算符号 1级优先级 左结合 () 圆括号 [] 下标运算符 -> 指向结构体成员运算符 . 结构体成员运算符 2级优先级 右结合 。 逻辑非运算符 ~ 按位取反运算符 ++ 自增运算符 自减运算符 - 负号运算符 (类型) 类型转换运算符 * 指针运算符 & 地
C语言的运算符的优先级:逻辑运算符、条件运算符、
最高级:出现同级别运算符时的结合方向是从左往右(下面级别没写结合顺序时,默认是从左往右)。 ( )圆括号 [ ]下标运算符号 ->指向结构体成员运算符 .结构体成员运算符 \ufffc
第二级:"~、++、、-、(类型)、*、&、sizeof。
c语言中运算符有哪几种,优先级顺序是怎样
C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。 运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。
C语言中运算符优先级排序如下: 分为优先级15级:
圆括号【()】、下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】;
逻辑非运算符【。】、按位取反运算符【~】、自增自减运算符【++】【 】、负号运
c语言中指针运算符*和自增运算符++的优先级
#include int main() { int value = 4; int *p_value = &valuc语言中自增运算符++作为后缀的话比指针运算符*的优先级高,作为前缀的话与指针运算符*平级。 C语言的运算符主要用于构成表达式,同一个符号在不同的表达式中,其作用并不一致。下面按计算的优先顺序,分别说明不同作用的表达式。
c语言中关系运算符的优先级高于逻辑运算符吗c语言中关系运算符的优先级高于逻辑运算符吗
不全是。关系运算符的优先级高于“逻辑与&&”和“逻辑或||”,但低于“逻辑非。”。
我知道从高到低为:圆括号 单目运算符 算术运算符 关系运算符 逻辑运算C语言运算符优先级顺序如下所示: 自增运算符 ++ 和自减运算符 ,在作后缀运算符(如表达式 x++)时,较其用作前缀运算符(如表达式 ++x)时,具有较高的优先级。+、-、* 和&运算符记号不但可以当作一元运算符(unary operator。
c语言逻辑运算符、关系运算符、算术运算符的优先级逻辑运算符里的非运算>算术运算符>关系运算符>逻辑运算符里的与运算>逻辑运算符里的或运算
C语言中运算符优先级最小的是
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。 所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。 具有最高优先级的其实并不算是真正的
而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。运算符的结合性c语言中各运算符的结合性分为两种, 即左结合性(自左至右)和右结合性(自右至左)。例如:左结合性:算术运算符的...
% 得到余数 7 % 2 得到1
运算符的优先级
C语言中,运算符的运算优先级共分为15级。1级最高, 15级最低。在表达式中, 优先级较高
的先于优先级较低的进行晕死。而在一个运算量两侧的运算符优先级相同时, 则按运算符的
结合性所规定的结合方向处理。
运算符的结合性
c语言中各运算符的结合性分为两种, 即左结合性(自左至右)和右结合性(自右至左)。
例如:
左结合性:
算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”结合,执行
x-y,在+z的yuns。这种是左结合性。
右结合性:
例如:
最典型的右结合性运算符是赋值运算符。如x=y=z, 由于=的右结合性, 应先执行y=z,
在执行x=, 可以理解为x=(y=z)的运算。
c语言运算符中有不少为右结合性, 应注意区别,避免理解错误。
自增、自减运算符
自增1:自增1运算符记为++, 其功能是使变量的值自增1
自减1:自减1运算符记为--, 其功能是使变量值自减1.
自增1, 自减1运算符均为单目运算, 都具有右结合性。可有一下几种形式:
++i i自增1后在参加其他运算。--i i自减后在参与其他运算
i++i参与运算后, i的值在自增1
i-- i参与运算后, i的值在自减1
voidmain()
{inti, j;
i= 5;
j= i++;
printf("%d, %d", i, j); #注意, 如果是-i++ 呢?结果是-6
}
// i 的值为6, j 为5
增加难度
思路:
i=5,然后i++,在i--这时候i是5,然后-i也就是-5--也就是-6了
逗号运算符和逗号表达式
在c语言中逗号“,”也是一种运算符, 称为逗号运算符。其功能是把两个表达式连接起来组成
一个表达式, 成为逗号表达式。
其一般形式为:
表达式1, 表达式2
其求值过程是分别求两个表示式的值, 并以表达式2的值作为整个逗号表达式的值。
注意了,而实际得到的是表达式1的值
那么怎么才能得到第二个值呢?在外面加个括号
而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。运算符的结合性c语言中各运算符的结合性分为两种, 即左结合性(自左至右)和右结合性(自右至左)。例如:左结合性:算术运算符的...
单目就是这个运算符只对一个变量进行操作代表符号:!(逻辑非) ~(按位取反)++(自增)--(自减)举例:int a=1;a++;(第二句“a++”则只对a一个变量进行了操作)2。双目就是这个运算符对两个变量进行操作举例:int a=1,b=2,...
在表达式中,各运算表达量参与运算的先后要遵守运算符优先级别的规定,也要受运算符结合姓的制约,以便确定是自左向右还是自右向左进行运算。这种结合性,增加了C语言的复杂性。