当前位置:文档之家› 逗号表达式赋值表达式和逗号表达式

逗号表达式赋值表达式和逗号表达式

逗号表达式赋值表达式和逗号表达式
逗号表达式赋值表达式和逗号表达式

逗号表达式:赋值表达式和逗号表达式

疯狂代码 https://www.doczj.com/doc/cf11768469.html,/ ?:http:/https://www.doczj.com/doc/cf11768469.html,/VC/Article57590.html

C把赋值运算符连接而成式子叫做赋值表达式例如:a=b、a=b+c、a=3等赋值运算符是个双目运算符必须两个参和运算值其左边值叫做l-value通常是变量或赋值表达式常量和常变量不可以作为赋值表达式左值赋值运算符右端值叫做r-value通常个常量、变量或表达式

C把逗号运算符连接式子叫做逗号表达式例如:“aa*3”“b+3d/4”等逗号表达式右被称为顺序求值表达式它值是最右端表达式值例如有如下逗号表达式:

a*=5a+2

假设a=3该逗号表达式求值步骤是先计算左侧表达式a*=5结果是a=15然后计算右侧表达式a+2值是17整条逗号表达式值为17

把赋值符和逗号连接式子作为表达式看待是C特点的引入赋值表达式和逗号表达式使C语句变得十分灵活丰富合理使用赋值表达式和逗号表达式可以大大精简代码使更紧凑下面我们来看看使用这两种表达式时窍门技巧和应当注意到问题

1:

#

using std;

{

unsigned a;

b=-1;

a=b;

cout<

0;

}

大家可以先猜测下运行结果

运行结果为65535为什么是这个结果呢?其实仔细想想很容易得出答案:我们知道型变量在内存中是占两个字节即16个 2进制位因此用-1给b赋值以后b中值就是1111,1111,1111,1111 【注】然后将其赋给a a所占内存也是16位原封不动全部搬过去 a值也变成1111,1111,1111,1111 a是无符号数它所有位都表示数值

1111,1111,1111,1111对应十进制数即使65535因此输出结果就是65535

【注】:所谓补码就是将该负数绝对值原码取反后最低位加1得到 2进制编码例如求取-3补码步骤如下:

第步:计算出3原码:0000,0000,0000,0011

第 2步:将3原码取反:1111,1111,1111,1100

第 3步:将取反后原码加1:1111,1111,1111,1101

1111,1111,1111,1101即是-3补码

例1运行结果给了我们个警示——区别类型变量相互赋值时定要考虑他们编码形式即值域范围否则可能得到和我们期望相差十万 8千里结果

例2:

#

using std;

{

a=3;

a4;

cout<

0;

}

这个例子无甚特别的处它仅仅介绍说明了赋值运算符可以跟基本运算符组合成为符合赋值运算符常见到组合方式有、-=、*=、/=、%=、<<=、>>=、&=、|=、∧=有关这些符合赋值运算符使用方法此处不作介绍大部分教授C基础书上都有不清楚可以自己去查看下面我们来看个有趣问题有如下表达式:

a=5*8,a*10

问该表达式值是多少?

讨论对该表达式求解可能会有两种区别声音:其认为a=5*8是个赋值表达式它跟后面a*10起构成了个逗号表达式所以求解时先算出a=5*8值然后计算a*10值;另种声音认为5*8,a*10是个逗号表达式应当先求这个逗号表达式值然后将逗号表达式值赋给a倒底那种理解对呢?这就需要查考两种运算符运算优先级了赋值运算符优先级要高于逗号运算符因此对表达式a=5*8,a*10求解应该是先计算a=5*8然后计算逗号表达式值

例3:

#

using std;

{

a;

a=3;

cout<<(aa=aa)<

0;

}

问输出结果是多少?

很多人见到诸如aa=aa这样表达式时还没研究先就头脑发晕了其实大可不必这么惶恐冷静下来仔细想想这个表达式还是很容易求解要求解这个表达式需要知道个先决条件——赋值运算求值顺序赋值运算都是从右至左求值知道了这点问题就迎刃而解了下面是对该表达式求解过程:

第步:计算最右端aa结果为6;

第 2步:将aa值赋给前个aa变为6;

第 3步:计算最左端aa结果为1212即为整个表达式值

好了现在大家对连续多次赋值赋值表达式求解应该没有问题了不过上例中还有个需要注意地方不知道大家有没有留意 cout语句中 “aa=aa”是加括号在用cout输出赋值表达式或逗号表达式值时定要用括号将整个表达式括起来否则编译会出错这主要是C输出流对象ostream中没有处理赋值运算符和逗号运算符机制如果你重载了<<运算符实现了这个机制就可以不要括号了(不过要重载<<实现输出赋值表达式是个比较复杂问题远不如加个括号来得轻快,因此牢记输出赋值或逗号表达式时定要用括号把正个表达式括起来)

整理总结赋值表达式和逗号表达式通常使用方法:

、赋值表达式使用方法:

1. 用于对多个变量赋值如:a=b=c=d=3;

2. 用于条件语句条件如:(a=fun(x,y)){}这时相当于执行

a=fun(x,y);

(a){}

赋值表达式通常用于以上两种情况但不限于此灵活运用赋值表达式可以极大精简代码使更加紧凑更多使用方法请自己去研究

2、逗号表达式使用方法:

1.用于顺序求值如:a=bb=cc=d; 相当于执行:

a=b;

b=c;

c=d;

3. 用于条件语句如:(a=fun(x,y),a>0){}这时相当于执行

a=fun(x,y);

(a>0){}

条件表达式通常用于以上两种情况但不限于此逗号语句最大特点在于它可以在条语句中整合多种区别类型表达式用条语句实现多个功能例如有如下可编译执行:

#

using std;

{

i;

cout<<3<

0;

}

逗号表达式极大增强了C语句灵活性使用逗号表达式可以精简代码希望大家在编程过程中灵活使用逗号表达式简化自己从代码使代码更紧凑更具可读性 2009-2-12 3:50:05

疯狂代码 https://www.doczj.com/doc/cf11768469.html,/

输入、输出、赋值语句同步练习2

输入、输出、赋值语句 1、计算机的程序设计语言很多,但各种程序语言都包含下列基本的算法语句: , , , , 。 2、 在程序语言中,下列符号分别表示什么运算 * ;\ ;∧ ;SQR ( ) ;ABS ( )? , , , , 。 3、下列程序运行后,a ,b ,c 的值各等于什么? (1) a=3 (2) a=3 b=-5 b=-5 c=8 c=8 a=b a=b b=c b=c PRINT a ,b ,c c=a END PRINT a ,b ,c END (1)________________________ (2)________________________ 4、. 指出下列语句的错误,并改正: (1)A=B=50 (2)x=1,y=2,z=3 (3)INPUT “How old are you ” x (4)INPUT ,x (5)PRINT A+B=;C (6)PRINT Good-bye! 5.将两个数8,17a b ==交换,使17,8a b ==,下面语句正确一组是 ( ) 6. ) 3b =

a a b =+ b a b =- PRINT a ,b A 1,3 B 4,1 C 0,0 D 6,0 7 下列给出的赋值语句中正确的是( ) A 4M = B M M =- C 3B A == D 0x y += 8 对赋值语句的描述正确的是 ( ) ①可以给变量提供初值 ②将表达式的值赋给变量 ③可以给一个变量重复赋值 ④不能给同一变量重复赋值 A ①②③ B ①② C ②③④ D ①②④ 9、已知f (x )=x 3-3x 2 +2x+1,写出任意一个x 的值对应的函数值f (x )的求法程序. 10.已知华氏温度和摄氏温度的转化公式为: 5(32)9=-?摄氏温度华氏温度 编写一个程序,输入一个华氏温度,输出其相应的摄氏温度。 11.编写一个程序,输入两个非零实数,输出他们加、减、乘、除的结果。 12.已知一个三角形的三边长分别是,,a b c ,它的面积可用海伦—秦九韶公式计算。 S =2a b c p ++= 设计一个算法程序,输入三角形的三条边长,,a b c ,输出三角形的面积S 。 13.春节到了,糖果店的售货员忙极了。已知水果糖每千克10.4元,奶糖每千克15.6元,果仁巧克力每千克25.2元,那么依次购买这三种果糖,,a b c 千克,应收取多少钱?请你设计一个程序,帮售货员算账。 14.编写一个程序,输入梯形的上底、下底和高的值,计算并输出其面积。 15.编写一个程序,交换两个变量a 、b 的值,并输出交换前后的值。

C语言运算符号的种类

一、C语言运算符号的种类 编辑 1 算术运算符 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。 2.关系运算符 用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=) 、小于等于(<=)和不等于(!=)六种。 3.逻辑运算符 用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 4.位操作运算符 参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 5.赋值运算符 用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。 6.条件运算符 这是一个三目运算符,用于条件求值(?:)。 7.逗号运算符 用于把若干表达式组合成一个表达式(,)。 8.指针运算符 用于取内容(*)和取地址(&)二种运算。 9.求字节数运算符 用于计算数据类型所占的字节数(sizeof)。 10.特殊运算符 有括号(),下标[],成员(→,.)等几种。 二、C语言运算符号的优先级 编辑 1、优先级1级 结合方向左结合(自左至右) ( ) 圆括号 [ ] [1] 下标运算符 -> 指向结构体成员运算符 . 结构体成员运算符[1] (请注意它是一个实心圆点) 2、优先级2级 结合方向右结合(自右至左)单目运算符

! 逻辑非运算符 ~ 按位取反运算符 ++ 自增运算符 -- 自减运算符 - 负号运算符 (类型) 类型转换运算符 * 指针运算符 & 地址与运算符 sizeof 长度运算符 3、优先级3级 结合方向左结合双目运算符* 乘法运算符 / 除法运算符 % 取余运算符 4、优先级4级 结合方向左结合双目运算符+ 加法运算符 - 减法运算符 5、优先级5级 结合方向左结合双目运算符<< 左移运算符 >> 右移运算符 6、优先级6级 结合方向左结合双目运算符<、<=、>、>= 关系运算符 7、优先级7级 结合方向左结合双目运算符== 等于运算符(判断) != 不等于运算符(判断) 8、优先级8级 结合方向左结合双目运算符& 按位与运算符 9、优先级9级 结合方向左结合双目运算符^ 按位异或运算符 10、优先级10级

掌握C语言中基本的运算符

第3讲 运算符运算符、、表达式&类型转换 【课前思考课前思考】】 1、回忆数学中的运算符回忆数学中的运算符、、表达式表达式,,C 语言中的运算符语言中的运算符、、表达式是什么样子表达式是什么样子?? 2、能否直接将一个浮点型数据赋值给整型变量能否直接将一个浮点型数据赋值给整型变量?? 【学习目标学习目标】】 掌握C 语言中基本的运算符、表达式,掌握C 语言中数据类型转换的方法 【学习指南学习指南】】 联想数学中的运算符及表达式,找出C 语言与其区别进行学习 【重 难 点】 重点: 算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符及其优先级 “=”与“==”的区别 难点: 自增、自减运算,逻辑运算,逗号运算 【学时安排学时安排】】 学时:2学时 【知 识 点】 第3讲 运算符、表达式&类型转换 (1) 2.3 运算符与表达式 (2) 2.3.1 算术运算符与算术表达式....................................................................................2 1. 算术运算符.................................................................................................................2 2. 算术表达式.................................................................................................................3 2.3.2 自增与自减运算....................................................................................................4 1. 自增、自减运算符的使用形式.................................................................................4 2. 自增、自减运算符的优先级和结合性....................................................................5 2.3.3 关系运算符与关系表达式....................................................................................5 1. 关系运算符.................................................................................................................5 2. 关系表达式.................................................................................................................6 2.3.4 逻辑运算符与逻辑表达式....................................................................................6 1. 逻辑运算符.................................................................................................................6 2. 逻辑表达式.................................................................................................................7 2.3.5 赋值运算符与赋值表达式....................................................................................8 2.3.6 条件运算符与求字节运算符................................................................................9 1. 条件运算符.................................................................................................................9 2. 求字节运算符.. (10)

人教A版高中数学必修三第一章1.2-1.2.1输入语句、输出语句和赋值语句同步练习(I)卷

人教A版高中数学必修三第一章1.2-1.2.1输入语句、输出语句和赋值语句同步练 习(I)卷 姓名:________ 班级:________ 成绩:________ 一、单选题 (共11题;共22分) 1. (2分)若输入x的值为3,则该程序运行后,输出变量y的值是() INPUT x IF x>3 THEN y=x*x ELSE y=2*x END IF PRINT y END A . 3 B . 6 C . 9 D . 27 2. (2分)以下给出的输入、输出语句、赋值语句中正确的有() ①输入语句INPUT a;b;c; ②输入语句INPUT x=3; ③输出语句PRINT 20,3*2;

④输出语句PRINT A=4; ⑤赋值语3=B; ⑥赋值语句x+y=0; ⑦赋值语句A=B=-2; ⑧赋值语句T=T*T. A . 2个 B . 3个 C . 4个 D . 5个 3. (2分) (2018高二下·辽源月考) 下列给出的赋值语句中正确的是() A . 4=M B . B=A=3 C . x+y=0 D . M=-M 4. (2分)关于赋值语句需要注意的事项中不正确的是() A . 赋值号左边只能是变量,而不能是表达式 B . 赋值号左、右两边不能对换 C . 不能利用赋值语句进行代数式的演算 D . 赋值号与数学中的等号的意义相同 5. (2分)读程序 甲:INPUT i=1 乙:INPUT i=1000

S=0 S=0 WHILE i<=1000 DO S=S+i S=S+i i=i+l i=i-1 WEND LOOP UNTIL i≤1 PRINT S PRINT S END END 对甲乙两程序和输出结果判断正确的是() A . 程序不同,结果不同 B . 程序不同,结果相同 C . 程序相同,结果不同 D . 程序相同,结果相同 6. (2分)输入x=3,根据程序输出的结果是() A . 13 B . 20 C . 12 D . 5

逗号运算、关系运算、逻辑运算和条件运算

逗号运算、关系运算、逻辑运算和条件运算逗号运算和逗号表达式 ●格式 表达式1,表达式2 ●求解顺序及结果 ?先求解表达式1,再求解表达式2 ?最终结果为表达式2的值 ●例 a = 3 * 5 , a * 4 最终结果为60 关系运算与关系表达式 ●关系运算是比较简单的一种逻辑运算,优先次序为: ●关系表达式是一种最简单的逻辑表达式 ?其结果类型为 bool,值只能为 true 或 false。 例如:a > b,c <= a + b,x + y == 3 逻辑运算与逻辑表达式 ●逻辑运算符 !(非) &&(与) ||(或) 优先次序:高→低 ●逻辑运算结果类型:bool,值只能为 true 或 false ●逻辑表达式 例如:(a > b) && (x > y) ●“&&”的运算规则 ?两侧表达式都为真,结果为真; ?有一侧表达式为假,结果为假。 ●“&&”的“短路特性” 表达式1 && 表达式2 ?先求解表达式1 ?若表达式1的值为false,则最终结果为false,不再求解表达式2 若表达式1的结果为true,则求解表达式2,以表达式2的结果作为最终结果

●“||”的运算规则 ?两侧表达式都为假,结果为假; ?有一侧表达式为真,结果为真。 ●“||”的“短路特性” 表达式1 || 表达式2 ?先求解表达式1 ?若表达式1的值为true,则最终结果为true,不再求解表达式2 若表达式1的结果为false,则求解表达式2,以表达式2的结果作为最终结果 条件运算符与条件表达式 ●一般形式 ?表达式1?表达式2:表达式3 表达式1 必须是 bool 类型 ●执行顺序 ?先求解表达式1, ?若表达式1的值为true,则求解表达式2,表达式2的值为最终结果 若表达式1的值为false,则求解表达式3,表达式3的值为最终结果 ●条件运算符优先级高于赋值运算符,低于逻辑运算符 ?例 表达式1是bool类型,表达式2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。

2.10C++逗号运算符与逗号表达式

C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。这是C++语言灵活性的一种表现。 请注意,用cout语句输出一个赋值表达式的值时,要将该赋值表达式用括号括起来,如果写成“cout<

自加、自减运算符和逗号表达式

自加、自减运算符和逗号表达式 1. 自加、自减运算符 (1)自加运算符(++) 对于自加运算符的使用需注意以下几点。 ①自加运算符“++”的运算结果是使运算对象增1。i++,相当于i=i+1。因此,自加运算是一种赋值运算。 ②运算符“++”是单目运算符,运算对象可以是整型变量也可以是实整型变量,不能是常量或表达式。所以像++3、(i+j)++是不合法的。 ③用自加运算符构成表达式时,既可以是前缀形式,也可以是后缀形式。这两种形式对于变量来说,其结果是相同的都是加1,但对表达式来说其值是不同的。例如,已定义变量int i=5。若表达式为++i,则先进行i增1运算,i的值为6,表达式的值也为6;若表达式为i++,则表达式先取i的值为5,然后i进行增1运算,使i中的值为6。 ④运算符“++”的结合方向是“自右向左”。 ⑤不要在一个表达式中对同一个变量进行多次诸如i++或++i等运算。 (2)自减运算符(——) 对于自减运算符的使用需注意以下几点: ①自减运算符“--”的运算结果是使运算对象减1。i--,相当于i=i-1。因此,自减运算是一种赋值运算。 ②运算符“--”是单目运算符,运算对象可以是整型变量也可以是实整型变量,不能是常量或表达式。所以像--3、(i+j)--是不合法的。 ③用自减运算符构成表达式时,既可以是前缀形式,也可以是后缀形式。这两种形式对于变量来说,其结果是相同的都是减1,但对表达式来说其值是不同的。例:已定义变量int i=5。若表达式为--i,则先进行i减1运算,i的值为4,表达式的值也为4;若表达式为i--,则表达式先取i的值为5,然后i进行减1运算,使i中的值为4。 ④运算符“--”的结合方向是“自右向左”。 ⑤不要在一个表达式中对同一个变量进行多次诸如i--或--i等运算。 2.逗号运算符和逗号表达式 (1)逗号运算符 “,”是C语言提供的一种特殊运算符,称为逗号运算符。逗号运算符的结合性为从左到右。在所有运算符中,逗号运算符的优先级最低。 (2)逗号表达式 用逗号运算符将表达式连接起来的式子称为逗号表达式。逗号表达式的一般形式为:表达式1,表达式2,……,表达式n 说明: ①逗号运算符的结合性为从左到右,因此逗号表达式将从左到右进行运算。即先计算表达式1,然后计算表达式2,依次进行,最后计算表达式n。最后一个表达式的值就是此逗号表达式的值。例如,逗号表达式a=3*5,a*4 先求解a=3*5,得到a的值为15,然后求解a*4,等于60。所以逗号表达式的值为60。

逗号表达式赋值表达式和逗号表达式

逗号表达式:赋值表达式和逗号表达式 疯狂代码 https://www.doczj.com/doc/cf11768469.html,/ ?:http:/https://www.doczj.com/doc/cf11768469.html,/VC/Article57590.html C把赋值运算符连接而成式子叫做赋值表达式例如:a=b、a=b+c、a=3等赋值运算符是个双目运算符必须两个参和运算值其左边值叫做l-value通常是变量或赋值表达式常量和常变量不可以作为赋值表达式左值赋值运算符右端值叫做r-value通常个常量、变量或表达式 C把逗号运算符连接式子叫做逗号表达式例如:“aa*3”“b+3d/4”等逗号表达式右被称为顺序求值表达式它值是最右端表达式值例如有如下逗号表达式: a*=5a+2 假设a=3该逗号表达式求值步骤是先计算左侧表达式a*=5结果是a=15然后计算右侧表达式a+2值是17整条逗号表达式值为17 把赋值符和逗号连接式子作为表达式看待是C特点的引入赋值表达式和逗号表达式使C语句变得十分灵活丰富合理使用赋值表达式和逗号表达式可以大大精简代码使更紧凑下面我们来看看使用这两种表达式时窍门技巧和应当注意到问题 1: # using std; { unsigned a;

b=-1; a=b; cout<

编程符号含义

( )∶C语言的分隔符——用于形成表达式、隔离条件表达式,以及指明函数调用和函数参数。 { }∶C语言的分隔符——用于指明复合语句(分程序)的开始和及结束。 +、-、*、/∶C语言的运算符——加、减、乘、除。 ;∶C语言的分隔符——终止一条语句。 = ∶C语言的①运算符——赋值。②分隔符——用于分隔变量说明和初始化表。 <∶C语言的运算符——小于。<=∶C语言的运算符——小于等于。 > ∶C语言的运算符——大于。>=∶C语言的运算符——大于等于。 ==∶C语言的运算符——等于 =∶C语言的运算符——不等于。

&&∶C语言的运算符——逻辑与。 ||∶C语言的运算符——逻辑或。 “∶%∶C语言的运算符——模除(取整除后的余数)。 ^ ∶C语言的运算符——按位异或。 | ∶C语言的运算符——按位或。 & ∶C语言的运算符——①取变量地址。②按位与。 ,∶C语言中①逗号运算符。②分隔符,用于分隔函数参数表中的各参数。 while(表达式)∶C语言的循环语句。 若表达式为真,执行随后{ }内的语句(或do后{ }内的语句)。 其它符号 ->∶C语言的运算符——指向结构(C++ 语言中的类)成员的指针引用。

<<∶C语言的运算符——字位左移。>>∶C语言的运算符——字位右移。 ++∶C语言的运算符——增一。 -- ∶C语言的运算符——减一。 \\∶C语言的转义(换码)序列——反斜杠(使用时与字符一样要用“”)。 \0∶C语言的转义(换码)序列——空白NULL。 \a∶C语言的转义(换码)序列——响铃。 \b∶C语言的转义(换码)序列——退格。 \n∶C语言的转义(换码)序列——换行。 \r∶C语言的转义(换码)序列——回车。 \t∶C语言的转义(换码)序列——制表符

作业━━第1章━━运算符与表达式

运算符与表达式 【学习要点】 1.掌握运算符的目数、优先级、结合性等概念。 2.掌握算术运算及其应用。 3.掌握自增、自减运算及其应用。 4.掌握关系、逻辑运算及其应用。 5.掌握位运算及其应用。 6.掌握赋值、复合赋值运算及其应用,掌握赋值兼容时的类型转换。 7.掌握表达式求值时类型的自动转换和强制转换。 8.掌握表达式的组成,掌握逻辑表达式的优化及其副作用。 9.掌握逗号运算符、sizeof运算符、条件运算符及其应用。 ------------------------------------------------------------------------------------------------------------------------------------------------- 【例题分析】 1.若int x,y,z;下列表达式中运算结果与x=y=24相同的是______。 A.x=(y=z=8,4*6) B.x=y=(z=8,4*6) C.x=y=z=8,4*6 D.x=(y=z=8),4*6 【答案】B 【解析】 ①C++语言的赋值运算有别于其它高级语言,逗号运算又是其它高级语言所没有的。 ②在赋值表达式中,可以有多个赋值运算符,计算顺序自右向左,运算优先级低,仅高于逗号运算符。 ③逗号既是分隔符,又是运算符,可以用一个逗号运算符或多个逗号运算符将多个表达式连接成逗号表达式,计算顺序自左向右,并将最后一个表达式的值作为整个逗号表达式的值,逗号运算优先级最低。 2.若int i=6,k=0;下列表达式中运算结果使k=7的是______。 A.k=i+++k B.k=k+i++ C.k=++i+k D.k=k+++i 【答案】C 【解析】 ①自增++、自减--运算符是C++语言特有的。 ②运算符++、--出现在变量的前面或后面,其运算结果是不同的。若++、--出现在变量前,则先将变量的值加1(或减1)后,再将变量的值参加运算;反之则先将变量的值参加运算,再将变量的值加1(或减1)。 ③自增、自减运算符的优先级高于算术运算符,因此对于k=i+++k:解释为i++,再加k;对于k=k+++i:解释为k++,再加i。 3.表达式‘A’+’B’+20的值是______。 【答案】151 【解析】不同类型的数据混合运算时,系统可以自动进行类型转换,将表示范围小的数据类型转换成另一操作数的相同类型后再参与运算,则转换为65+66+20=151。 4.若int e=8;double f=6.4,g=8.9;则f+int(e/3*int(f+g)/2)%4的值是______。 【答案】9.4 【解析】 ①不同类型的数据混合运算时,可以使用强制类型转换符,将一种数据类型强制转换成另一种数据类型后再参与运算。 ②表达式中:e/3的值是整型数2,int(f+g)的值是整型数15,int(e/3*int(f+g)/2)的值是整型数15,15%4的值是

C语言中的特殊运算符

特殊运算符 一、"?"运算符 "?"运算符是一个三目运算符, 其一般形式是: <表达式1>?<表达式2>:<表达式3>; "?"运算符的含义是: 先求表达式1的值, 如果为真, 则求表达式2 的值并把它作为整个表达式的值; 如果表达式1 的值为假, 则求表达式3 的值并把它作为整个表达式的值。 例如: main() { int x, y; x=50; y=x>70?100:0; } 本例中, y将被赋值0。如果x=80, y将被赋值100。 因此, "?"运算符可以代替某些if-then-else形式的语句。 二、"&"和"*"运算符 "&"运算符是一个返回操作数地址的单目操作符。 "*"运算符是对"&"运算符的一个补充, 它返回位于这个地址内的变量值, 也是单目操作符。 例如: main() { int i, j, *m; i=10; m=&i; /*将变量i的地址赋给m*/ j=*m; /*地址m所指的单元的值赋给j*/ } 上面程序运行后, i=10, m为其对应的内存地址, j的值也为10。 三、","运算符 ","运算符用于将多个表达式串在一起, ","运算符的左边总不返回, 右边表达式的值才是整个表达式的值。 例如: main() { int x, y; x=50; y=(x=x-5, x/5); } 上面程序执行后y值为9, 因为x的初始值为50, 减5后变为45, 45除5为9赋给y。 四、sizeof运算符 sizeof运算符是一个单目运算符, 它返回变量或类型的字节长度。 例如: sizeof(double) 为8

sizeof(int) 为2 也可以求已定义的变量, 例如: float f; int i; i=sizeof(f); 则i的值将为4。 五、联合操作 Turbo C中有一特殊的简写方式, 它用来简化一种赋值语句, 适用于所有的双目运算符。其一般形式为: <变量>=<变量><操作数><表达式> 相当于 <变量><操作数>=<表达式> 例如: a=a+b 可写成 a+=b a=a&b 可写成 a&=b a=a/(b-c) 可写成 a/=b-c Turbo C规定了运算符的优先次序即优先级。当一个表达式中有多个运算符参加运算时, 将按下表所规定的优先级进行运算。表中优先级从上往下逐渐降低, 同一行优先级相同。 例如: 表达式 10>4&&!(100<99)||3<=5 的值为1 表达式 10>4&&!(100<99)&&3<=5 的值为0 Turbo C运算符的优先次序 ()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)( 最高) !(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址) *(指针所指内容) type(函数说明) sizeof(长度计算) *(乘) /(除) %(取模) +(加) -(减) <<(位左移) >>(位右移) <(小于) <=(小于等于) >(大于) >=(大于等于) ==(等于) !=(不等于) &(位与) ^(位异或) |(位或) &&(逻辑与) ||(逻辑或) ?:(?表达式) = += -=(联合操作) ,(逗号运算符) ( 最低)

典型例题(逗号运算符,++)

1、逗号表达式的应用 #include main() { int a,b,c; a=b=c=0; c=(a-=a-5),(a=b,b+3); printf("1:a=%d,b=%d,c=%d\n",a,b,c); a=b=c=0; c=((a-=a-5),(a=b,b+3)); printf("2:a=%d,b=%d,c=%d\n",a,b,c); a=b=c=0; c=((a-=a-5),(a=(b,b+3))); printf("3:a=%d,b=%d,c=%d\n",a,b,c); } 运行结果:1:a=0,b=0,c=5 2:a=0,b=0,c=3 3:a=3,b=0,c=3 注意:赋值运算符的优先级高于逗号运算符 2、表达式中同一变量多次“++”的问题 #include main() { int i,j,x,y; i=5;j=5; x=(++i)+(++i)+(++i); y=(j++)+(j++)+(j++); printf("%d,%d,%d,%d\n",i,j,x,y); } 运行结果:8,8,22,15 浅析:++i先做i=i+1,再做表达式运算;i++先做表达式运算,再做i=i+1;①x=(++i)+(++i)+(++i);运算过程如下: i=i+1(i=6)——> i=i+1(i=7)——>i+i的值送给寄存器a中(a=14)——> i=i+1(i=8) ——>x=a+i(x=22); ②y=(j++)+(j++)+(j++);运算过程如下: y=j+j+j(y=15) ——>j=j+1; j=j+1; j=j+1;(j=8)

相关主题
文本预览
相关文档 最新文档