C语言学习3运算符.docx
《C语言学习3运算符.docx》由会员分享,可在线阅读,更多相关《C语言学习3运算符.docx(4页珍藏版)》请在咨信网上搜索。
C语言学习3——运算符 3.1:C语言中的运算符就是我们平时所说的加减乘除等,那么在C语言中,它们有着怎样的先后顺序呢,看表3—1: 运算符 结合性 () 从左到右 +-(一元运算符) 从右到左 */ 从左到右 +-(二元运算符) 从左到右 = 从右到左 表3—1:常用运算符及优先级 当两个运算符共享一个操作数时,具有较高优先级的运算符先被运算。如果运算符有相同的优先级,结合性(从左到右还是从右到左)决定了哪个运算符先被应用。 例如:y =2*6/3;*和/共享了操作数6,而*和/又着同样的优先级,所以由结合性(从左到右)来决定运算顺序,即先算*再算除。 我们再来看个简单的额难问题(这不是病句哦),y =2*3+6*7,表达式中的加号分别于两个乘号共用了操作数3和6,有优先级可知先,3先与第一个乘号结合,6与第二个乘号结合。但问题是,计算机先计算2*3还是先计算6*7呢?您可能说,明显是从左到右嘛,这只是我们平时计算的习惯,计算机是不确定的,因为结合性(从左到右还是从右到左)只适用于同等优先级的运算符共享同一个操作数。幸运的是,计算机不管先计算2*3还是先计算6*7,结果是一样的,只是随着硬件的不同,计算的速度不同而已。 3.2:下面我们再来看下取模运算符:% 取模运算符用于整数运算,取模运算符就是求两个整数相除的余数。例如:11%5的结果是1、3%2的结果是1.对于两个整数取模很容易计算和理解,那么负数的取模运算按照什么规则呢?C99规定了,第一个操作数是负数,那么模也是负数,如果第一个操作数是正数,那么模也是正数。例如:11%5的结果是1、11%-2的结果是1、-11%-5的结果是-1、11%-5的结果是1。 3.3:增量和减量运算符:++ - - 这两运算符算是比较难的了,记得大学里老师讲的也云里雾里的。下面我们看程序3.1 /* 函数名:main 输入参数:无 输出参数:无 调用函数: printf() 被调用:无 功能:验证运算符++和- - */ #include <stdio.h> void main(void) { int i_num = 0; int i_width = 0; i_num++; ++i_width; printf("i_num =%d,i_width =%d\n",i_num,i_width); } 程序3.1:++num与num++的区别 上面的程序运行完i_num和i_width分别是多少呢?看看下面的运行结果: 当时看到这个结果,我都要哭了,因为,大学老师讲++在变量的前面与后面是不一样的,结果我反复的翻阅资料终于找到了原因!当单独使用这些增量运算符时(例如i_num++),那么++放在变量的前后是一样的,也就是说++num与num++的结果是一样的,当该运算符及其操作数是一个更大的表达式的一部分时(例如:width =num++与width =++num),两种情况就不一样了。下面我看程序3.2 /* 函数名:main 输入参数:无 输出参数:无 调用函数: printf() 被调用:无 功能:验证运算符++和- - */ #include <stdio.h> void main(void) { int i_num = 0; int i_width = 0; int m,n; m = i_num++; n = ++i_width; printf("m =%d,n =%d,i_num=%d,i_width=%d\n",m,n,i_num,i_width); } 程序3.2:++num与num++的区别 我们用上面的结论来看看程序3.2运行完m,n,i_num,i_width的值分别是多少。 “m = i_num++;”该语句是将i_num先赋值给m,然后自己再自加,所以m=0, i_num=1; “n = ++i_width;该语句是将i_width先自加1再将自加后的值赋给n,所以n =1, i_width =1.下面让我们看看运行的结果是否如此: 一句话总结,当n++是表达式的一部分时,先使用n然后将它的值加1;++n则是先加一再使用加完后的n. 下面提出一个问题: x=2; y=3; x*y++与x*++y的值分别是多少? ++的优先级仅低于(),所以x*y++可写成x*(y++),其结果自然是2*3=6.后面一个就由您来验证吧。 自减运算符与自增运算符是一个道理,这里就不详细讲解了。 看了自增运算符时,您可能觉的这挺酷的,想尽快运用的程序里。但在您使用之前,我还需要提出几点要注意的地方,减少您以后使用中遇到的麻烦。 注意点1:如果一个变量出现在同一个函数的多个参数中时,不要使用自增运算符。 例如:假设num的初始值是1那么printf(“%10d %10d\n”,num,num*num++)打印出的结果是什么呢?这是不确定的,因为printf()获取要打印的值时,它可能先计算第二个参数,也就是说num先自加,那么结果是绿色的num是1、橙色和红色的的num是2,也就是说打印出的结果是2、2.而如果printf()先计算的是第一个参数,那么结果又是另一个情况了。 注意点2:当一个变量多次出现在一个表达式里时,不要使用自增运算符。 例如:假设num的初始值是3,那么ans =num/2 +5*(1+num++)的结果是多少呢?您可能认为表达式的运算顺序是从左到右,但实际情况是不确定的。有可能是先算(1+num++),那么这将导致num/2中的num变成4.所以防止因系统不同而出现没必要的麻烦,建议您还是不要用这样的表达式。 3.4:类型转换 有些时候在一个表达式中会出现多种类型的数据,计算机时无法直接计算不同类型的数据的,所以计算机遇到不同类型的数据运算时会自动将数据进行类型转换,那么就得有一个统一的转换规则,下面我们具体看看这些转换的规则: 1:当出现在表达式里时,有符号和无符号的char和short类型都将自动转换成int. 2:在包含两种数据类型的任何运算里,两个值都将转换成两种类型中的较高的级别. 3:类型级别从高到低分别是:long double、double、float、unsigned long、long、unsigned int、int. 4:在赋值语句里,计算的结果将被转换成将要赋值的变量的类型。 5:当作为函数的参数传递时,char和short会转换成int,float会被转换成double. 为了您更好的理解,下面我们借助一段程序来对上面的规则进一步的讲解。 #incldue <stdio.h> void main(void) { char ch; int I; float f1; f1 = I =ch =’C’;/*第9行*/ printf(“ch=%c,i=%d,f1=%2.2f\n”,ch,I,f1); /*第10行*/ ch = ch + 1; /*第11行*/ I =f1 + 2*ch; /*第12行*/ f1 =2.0*ch +I; /*第13行*/ printf(“ch=%c,i=%d,f1=%2.2f\n”, ch,I,f1); /*第14行*/ ch = 5212205.17; /*第15行*/ printf(“Now ch = %c”,ch); } 第9行和第10行,‘C’被作为1字节的ASCII码存放在ch中,’C’转换成4字节的整数,即67存放在i中。最后f1接受67转换成的浮点数,及67.00. 第11行和第14行,’C’先转换成整数再与1相加,结果的4字节数据被截成1字节放在ch中。 第12行和第14行,为了和2相乘,ch转换成4字节的整数,计算的结果为了和f1相加,转换成浮点型,相加后的而结果再转换成整型赋值给i. 第15和16行,右边的浮点数会被截成一个字节。然后赋值给ch,这便导致实际赋给ch的值可能与你想赋的值不相等,所以不要使用降级的赋值语句。 虽然计算机会自动转换数据的类型,但未了出现像降级转换等的错误以及加深对程序中变量类型的理解,我们应该自己来规定数据的类型。这便用到指派运算符,其格式是圆括号里面放上需要指派的数据类型。比较下面两个语句: Int mice =1.6 +1.7; Int mice =(int)1.6 +(int 1.7) 第一个语句是1.6与1.7以double的格式相加,结果以整数的类型赋给mice,其值为3. 第二个语句是1.6转换成整数1,1.7转换成整数1,相加后赋给mice,所以结果是2. 看了上面的的比较我们发现,数据类型的不同,运算结果可能会出现不同,所以要在正确的使用数据的类型。 才疏学浅,还望指教。 欢迎大家加入单片机与C语言交流群:325011683- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学习 运算
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文