C语言课件第三章运算符和表达式_第1页
C语言课件第三章运算符和表达式_第2页
C语言课件第三章运算符和表达式_第3页
C语言课件第三章运算符和表达式_第4页
C语言课件第三章运算符和表达式_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计大连软件职业学院3.1算术运算单目运算符:只作用于一个运算对象的运算符;

双目运算符:作用于两个运算对象的运算符。

一元运算符:++,--,+,-二元运算符:+,-,*,/,%(注意对运算对象的要求)1.求余运算A只能用来求两个整数(int型或char型)的余数;B会求a%b的值;eg:14%(-6)=?-14%6=?

余数符号一除了求余运算符外,其余运算符均既可整数运算,又可作浮点数运算。求余运算符仅可作整数运算。二两个整数相除的运算结果为一个整数。eg:13/5三加减运算符可以作字符运算。eg:’a’+1算术运算符在使用中注意事项优先级和结合性规则A不同级别:在算术运算符中,其优先级别从高到低依次为:()(括号最优先)+,-,++,--(一元运算符)*,/,%(二元运算符)+,-(二元运算符)B同一级别:按它们的结合性确定其优先次序.返回2.增1和减1运算–––也称自加和自减运算;A.用法:++或--可以写在变量之前称为前缀,写在变量之后称为后缀。eg:++i表示i=i+1--i表示i=i-1i++i--

注意:++或--只能对变量施加运算,不能对常量或表达式施加运算。Eg:5++或者(a+b)++或者++(a+b)都是错误的。前缀和后缀的区别.程序+-.cj=++i;j=i++;※小结:++i先运算,后取值;i++先取值,后运算。++i,--i在使用i之前,先使i的值加(减)1;i++,i--在使用i之后,使i的值加(减)1;

inti=3,j=3;printf(“%d,%d\n”,++i,j++);运行结果:运行后的i,j

4,34,4思考:1)intx=10,y=7;y=++x-y+2;printf(“%d%d\n”,y,x);显示什么?Ex.c注意一:最长符号原则:由于C语言的运算符可由多个符号组成,如:++,->,&&,||,->*……那么i+++j是(i++)+j还是i+(++j)?

“最长符号原则”规定:从左算起的多个符号若符合C语言规定的法定符号,一律不得拆分。注意:尽量避免这样有歧义的写法.注意二:Eg:inti=3;printf(“%d,%d”,i,i++);尽量避免这样的写法inti=3,j;j=i++;printf(“%d,%d”,i,j);后置运算符到底后到哪?inti=3,j;j=i+++i++;printf(“%d,%d\n”,i,j);

运行后i,j的值:5,6因为i++要等到加之后做,故j=6,i由3增到5。结论:后置运算要”后”到本语句的其它动作之后。表达式:表达式是一种使用常量、变量和函数以及运算符组合起来的有确定值及类型的算式。算术表达式inta=1,b=2;a*b+5b/a+a%ba+++b--3.1.3关系运算和逻辑运算一.关系运算符1.六种关系运算符><>=<===!=结合性:都是从左到右同一优先级同一优先级

二.关系表达式用六个关系运算符中的一个连接两个算术表达式或赋值表达式,就构成了关系表达式.Eg:a+b>=c-dx==y注意和“=”区分!!score>90等注意:1.C语言不提供逻辑型数据,而是整数1表示真,用整数0表示假。

判断:eg:0>942!=4242==42100!=50

四.逻辑运算符1.逻辑运算符的种类:

!逻辑非&&逻辑与‖逻辑或2.逻辑运算必须连接逻辑量,运算的结果也是逻辑量,即结果只能是0或1。C语言中真与假的规定非0为真,0为假;运算结果为真时用1表示;运算结果为假时用0表示。特别注意:所有非“0”整数都认为是逻辑“真”,整数“0”则认为是逻辑“假”。例如25&&-3其值得10||356其值得1!(-23)其值得03.运算符的优先级和结合性!(非)算术运算符关系运算符&&和‖赋值运算符关系运算符和逻辑运算符的优先级低于算术运算符,高于赋值运算符,因此,x+y>=a+b与(x+y)>=(a+b)等价低高“短路”现象:1.在计算形如(表达式1)&&(表达式2)&&……的逻辑表达式时,只要有一个表达式的值为假,那么整个表达式的值就为假。因此,C语言规定在计算过程中先计算表达式1,如果其值是逻辑真或非0,就接着计算表达式2,如果第一个表达式为逻辑假,则可以判定整个表达式的值为逻辑假,其后的表达式不被计算。2.在计算形如(表达式1)‖(表达式2)‖……,先计算表达式1,如果其值为逻辑“假”或0,就接着计算表达式2,如果第一个为逻辑真的表达式就可判定整个表达式为逻辑真,其后的表达式将不被计算。Eg:main(){inta=1,b=2,c=3,d=4,m=2,n=2;(m=a>b)&&(n=c>d);printf(“%d%d\n”,m,n);}思考??

数值在计算机中的表示

1.二进制位与字节

计算机系统的内存储器,是由许多称为字节的单元组成的,1个字节由8个二进制位(bit)构成,每位的取值为0/1。最右端的那1位称为“最低位”,编号为0;最左端的那1位称为“最高位”,而且从最低位到最高位顺序,依次编号。下图是1个字节各二进制位的编号。

2.数值的原码表示数值的原码表示是,将最高位用作符号位(0表示正数,1表示负数),其余各位代表数值本身的绝对值(以二进制形式表示)的表示形式。为简化描述起见,本节约定用1个字节表示1个整数。

76543210例如,+9的原码是00001001└→符号位上的0表示正数-9的原码是10001001。└→符号位上的1表示负数3.数值的反码表示数值的反码表示分两种情况:(1)正数的反码:与原码相同。例如,+9的反码是00001001。(2)负数的反码:符号位为1,其余各位为该数绝对值的原码按位取反(1变0、0变1)。例如,-9的反码:因为是负数,则符号位为“1”;其余7位为-9的绝对值+9的原码0001001按位取反为1110110,所以-9的反码是11110110。4.数值的补码表示数值的补码表示也分两种情况:(1)正数的补码:与原码相同。例如,+9的补码是00001001。(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。例如,-9的补码:因为是负数,则符号位为“1”;其余7位为-9的绝对值+9的原码0001001按位取反为1110110;再加1,所以-9的补码是11110111。5.数值在计算机中的表示──补码在计算机系统中,数值一律用补码表示(存储),原因在于:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。3.15位操作位操作是对字节或字节内部的二进制位进行测试、设置、移位或逻辑运算。位操作分为两类:一类是逻辑位运算;另一类是移位运算。1逻辑位运算1.逻辑位运算符逻辑位运算用来对某一个或某一对二进制位进行操作。其中:~表示按位取反&表示按位与︱表示按位或^表示按位异或pqp&qp^qp|q~p000001010111100110111010按位与按位异或按位或按位取反思考:10&&2=?10&2=?10^2=?2移位运算移位运算计算实现操作数字中所有的二进制位按指定的位数顺序向左或向右移位.移位运算包括左移位和右移位。移位运算的一般格式为v<<nv>>n其中,v是操作数,可以是变量,也可以是表达式;n必须是正整数,表示要移动的位数。(1)左移位运算假设有变量a,左移位运算a<<n,表示将a的各个二进制位顺序左移n位,右端空出的位补0,移出左端之外的位则舍弃。例如,设a=25,则a<<3为200:

┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐a│0│0│0│0│0│0│0│0│0│0│0│1│1│0│0│1│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐a<<3│0│0│0│0│0│0│0│0│1│1│0│0│1│0│0│0│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘左移位相当于乘2运算左移舍弃,右补空格.(2)右移位运算假设有变量a,右移位运算a>>n,表示将a的各个二进制位顺序右移n位,移出右端之外的位被舍弃,左端空出的位则补0或补1,这取决于具体的机器和被移位的数是有符号数还是无符号数。(1)对无符号数进行右移时,左端空出的位一律补0;(2)对用补码表示的有符号数进行右移时,有的机器采取逻辑右移,有的机器则采取算术右移。逻辑右移:不管是正数还是负数,左端空位一律补0;算术右移:正数右移,左端的空位全部补0;负数右移,左端的空位全部补1(即符号位)。例如,设a=-32768(补码表示),则有:┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐a│1│0│0│0│0│0│0│0│0│0│0│0│0│0│0│0│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐a>>2│0│0│1│0│0│0│0│0│0│0│0│0│0│0│0│0│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘逻辑右移2位后,其值为8192。┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐a>>2│1│1│1│0│0│0│0│0│0│0│0│0│0│0│0│0│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘算术右移2位后,其值为-8192。算术右移相当于除2运算。3.1.6赋值运算赋值表达式的形式:v=eEg:a=10其中:“=”称为赋值符号或赋值运算符号;“=”右边的e是一个表达式或常量;左边的v是一个变量或数组元素.赋值表达式的功能是计算e的值并存放在v中.赋值表达式的末尾加上分号就是赋值语句.一.赋值运算符C语言提供了两种赋值运算符:

简单赋值运算符;复合赋值运算符.1.简单赋值运算符即“=”,它必须连接两个运算量,其左边只能是变量或数组元素,右边可以是任何表达式.Eg:判断正误?x=y+2;x=x+1;y+2=x,5=x;2.复合赋值运算符复合赋值运算符有10种,它们由赋值号“=”和另外一个二元(双目)运算符组成,具有计算和赋值双重功能.复合赋值运算的一般格式为:

变量双目运算符=表达式└──┬──┘复合赋值运算符它等价于:变量=变量双目运算符(表达式)。当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能出错。例如,x+=3 /*等价于x=x+3*/y*=x+6 /*等价于y=y*(x+6),而不是y=y*x+6*/

注意:一.使用复合赋值运算符连接两个运算量时,要把右边的运算量视为一个整体。例如x*=y+5表示x=x*(y+5)而不是x=x*y+5。二.优先级:所有的赋值运算符都处于同一优先级,且优先级很低,仅比逗号运算符高而比其他所有的运算符都低.

结合性:从右到左。赋值运算要求类型兼容教材3.4节类型转换问题由低到高——自动转换由高到低——强制转换(类型说明符)〈表达式〉eg:inta=3;doubleb;b=a;自动类型转换低高doublefloatlongunsignedintchar,short低高①横向箭头表示必定的转换(两个float型的数据运算,也先都化成double型除非各自后缀f。)②纵向箭头表示当运算对象类型不同时的转换方向。强制转换举例#include<stdio.h>voidmain(){ inta=5; floatb=(float)3.9; doubled; d=b; a=(int)b; printf("%d\t%.2lf\n",a,d);}其他运算符1三目运算符d1?d2:d3例如:分析如下程序结果inta=3,b=5;a>b?a:b3数据长度运算符sizeof((类型说明符)/(变量名))Eg:分析以下表达式值分别为多少?inta,b[20];sizeof(a);sizeof(int);sizeof(b);sizeof(b[1]);4逗号运算符一.逗号表达式的形式d1,d2,d3,d41.Eg:3+5,6+83*5,a*4,a+52.表达式1,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论