资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,数据类型与运算规则,1,C,语言程序设计教学内容,一,C,语言程序设计概述,(,第,1,、,2,章,),二 数据类型与运算规则,(,第,3,章,),三 顺序结构程序设计,(,第,4,章,),四 选择结构,(,第,5,章,),五 循环结构,(,第,6,章,),七 函数,(,第,8,章,),六 数组,(,第,7,章,),八 指针,(,第,9,章,),九 结构,(,第,10,章,),十 文件,(,第,11,章,),语言规则,程序流程,数据结构,自学,基础,重点,难,2,第,3,章 数据类型与运算规则,本章要点,数据的描述规则,数据的操作规则,3,第,3,章 数据类型与运算规则,数据与数据类型,C,语言的,基本数据类型,算术运算与赋值运算,关系运算与逻辑运算,位运算,其它运算,混合运算及数据类型转换,数据的,描述规则,数据的,运算规则,4,3.1,数据与数据类型,引入,什么是语言规则,为什么要用语言规则?,常量,变量,运算符,表达式,函数,我们人能明白的、用自然语言和数学语言描述的问题 计算机能明白的、,C,语言语法规则描述的问题,表达式,常量,变量,函数,程序设计语言的基本规则包括:,5,3.1,数据与数据类型,问题,常量,3,、,5,和,的处理是否相同?,变量,x,如何表示?如何存放?,计算机如何知道,3,和,5,之间的关系?,如何输入?如何存放?,计算机如何识别“,=,”,?运算结果放在哪里?,计算机完成该计算,首先要解决数据的,输入,和,存放,问题,6,3.1,数据与数据类型,程序的任务是对数据进行处理,数据是程序处理的对象,而运算符是施加给这些数据的操作。,数据,和,运算符,是表达式的基本元素。,数据的存储,数据的操作,程序,7,3.1,数据与数据类型,C,语言中的数据类型,整数型,int,基本类型 实数型,float,,,double,字符型,char,指针类型,数据类型 数组型,构造类型 结构型,struct,联合型,union,枚举型,enum,空类型,void,8,第,3,章 数据类型与运算规则,数据与数据类型,C,语言的,基本数据类型,算术运算与赋值运算,关系运算与逻辑运算,位运算,其它运算,混合运算及数据类型转换,9,3.2,C,语言的,基本数据类型,本节结构,常量,字符常量,数值常量,计算机语言表示数据的基本形式,实型常量,整型常量,字符常量,字符串常量,变量,字符变量,数值变量,实型变量,整型变量,指针变量,整型,实型,字符型,10,3.2,C,语言的,基本数据类型,计算机语言表示数据的基本形式,常量,程序运行中,值保持不变的量,常量的表示方法,整型,100,125,-100,0,实型,字符型,a,b,2,字符串,“,a,”,“a,b,”,“1232”,11,3.2,C,语言的,基本数据类型,计算机语言表示数据的基本形式,符号常量,用来表示常量的标识符,例:已知圆半径,r,,求圆周长,c,和面积,s,的值。,int main(),float r,c,s;,scanf(%f,c=2*PI*r;,/*,编译时用,替换,PI,*/,s=PI*r*r;,/*,编译时用,替换,PI,*/,printf(c=%6.2f,s=%6.2fn,c,s);,#include,#include,#define.,预处理命令,12,3.2,C,语言的,基本数据类型,计算机语言表示数据的基本形式,例:,#define SAN 2+1,如果,x=SAN*SAN,,,x=,?,x=5,x=2+1*2+1=5,13,3.2,C,语言的,基本数据类型,计算机语言表示数据的基本形式,变量,程序运行时,值可以改变的量,有关变量的规定:,变量通过变量名标识,变量名和内存中的存储单元相对应。编写程序时通过变量名来存、取存储单元;,变量必须先定义,(,说明,),,再赋值,再使用。,在C语言中,用类型说明语句对变量进行定义,其形式如下:,2 C语言的基本数据类型,int a=5,b=5,c=5;,如果|的一边已经为 1,结果一定为 1,后面的也不做了,基本类型 实数型 float,double,int a1=10,b1=6,c1=10;/*分别给a、b、c赋不同的初值*/,转义字符:是特殊性质的字符常量,用于表示常用的但却难以用一般形式表示的不可显示字符;,阶码:2127=1.,printf(“%d”,sizeof(“w160good”);,字符串常量是用双引号括起来的一个或多个字符。,计算机如何知道3和5之间的关系?,运算符含义 对象个数结合方向 优先级,else printf(“b!=an”);,位运算与赋值运算相结合,计算机语言表示数据的基本形式,printf(605,608);,转义字符:是特殊性质的字符常量,用于表示常用的但却难以用一般形式表示的不可显示字符;,使用算术表达式时应注意:,14,55,3.2,C,语言的,基本数据类型,计算机语言表示数据的基本形式,变量,程序运行时,值可以改变的量,内存,变量,a,1000H,1001H,1002H,256,12,常量不占用内存空间!,15,3.2,C,语言的,基本数据类型,计算机语言表示数据的基本形式,变量的定义,变量是以标识符的形式来表示类型的。在,C,语言中,用类型说明语句对变量进行定义,其形式如下:,类型说明符 变量名表;,int a,b;,/*,说明,a,b,为整型变量,*,/,char c;,/*,说明,c,为字符变量,*,/,double x,y;,/*,说明,x,y,为双精度实型变量,*,/,16,3.2,C,语言的,基本数据类型,计算机语言表示数据的基本形式,小结,C,程序中,常量直接以自身的存在形式体现其值和类型:,12,,,0 x12,,,0 x12L,,,12.,,,.12,,,2e3,,,,,2e3L,变量以标识符的形式来表示类型:,int a;char c;double x,y;,常量不占内存,程序运行时它作为操作对象直接出现在运算器的各种寄存器中;,17,3.2,C,语言的,基本数据类型,计算机语言表示数据的基本形式,程序中的一个变量可以看作是一个存储数据的容器,功能是存储数据;,C,语言要求,每个变量必须先定义,再赋值,再使用。,18,3.2,C,语言的,基本数据类型,本节介绍各种数据类型的名称、存放的长度、表示数的范围、各种数据类型变量的说明格式、初始化、常量的表示方法以及使用中的注意事项等。,重点和难点,数据的表示范围,实型数据的有效数字,转义字符的概念,19,3.2,C,语言的,基本数据类型,整型数据及其表示,整数类型,整数基本类型表,基本整型,短整型,长整型,无符号整型,无符号短整型,无符号长整型,20,3.2,C,语言的,基本数据类型,整型数据及其表示,整型常量,整型常量的类型,根据值大小默认类型,在常量后面加,l,或,L,,表示,long int,型,例如:,123L,0L,432l,都是,long int,型常量,整型常量的不同数值表示方法,十进制:,09,八进制:,07,,以,0,开头,十六进制:,09,,,AF/af,,,以0,x,或,0X,开头,例如,100,、,-8L,、,0,;,010,、,024L,;,0 x18L,、,0X1F,整型数据包括整型常量和整型变量,整型数据以二进制补码形式存储。,整型常量都是有符号的,21,3.2,C,语言的,基本数据类型,整型数据及其表示,整型变量,整型变量的形式,基本整型,int,短整型,short int,长整型,longint,无符号整型,unsigned int,无符号短整型,unsigned short,无符号长整型,unsigned long,占存储空间,占内存字节数,2,或,4,2,4,2,或,4,2,4,22,3.2,C,语言的,基本数据类型,整型数据及其表示,整型变量的定义,类型说明符 变量名表;,例:,int i,j;,long k,m;,unsigned int x,y,C,中的所有变量必须先定义后使用!,此时变量有值吗?,23,3.2,C,语言的,基本数据类型,类型,存储字节数,最小值,最大值,short int,2,-32768,32767,unsigned short int,2,0,65535,int,2,-32768,32767,unsigned int,2,0,65535,long int,4,-2147483648,2147483648,unsigned long int,4,0,4294967295,16,位机各类型数据通常取值范围,24,3.2,C,语言的,基本数据类型,类型,存储字节数,最小值,最大值,short int,2,-32768,32767,unsigned short int,2,0,65535,int,4,-2147483648,2147483648,unsigned int,4,0,4294967295,long int,4,-2147483648,2147483648,unsigned long int,4,0,4294967295,32,位机各类型数据通常取值范围,25,3.2,C,语言的,基本数据类型,整型数据及其表示,int,型数的表示范围,:,存储长度,16,位二进制,(2,B),0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1,0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1,1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,=1,=3,绝对值最大的负数?,=-2,15,=-32768,a,最大的正数?,=2,15,-1=32767,0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1,26,3.2,C,语言的,基本数据类型,整型数据及其表示,int,型数的表示范围,:,定点二进制补码表示,占,2,个字节存储,数的表示范围:,-32768,32767,27,3.2,C,语言的,基本数据类型,整型数据及其表示,整型数据在使用中应注意以下几个问题:,(1),变量要先定义后使用;,(2),数据溢出;,(3),常量与变量的类型要匹配。,例:编写求两数和的,C,程序并上机运行。程序如下:,阅读,P44,中的几个关于整型数据使用中应注意的几个问题的讨论。,28,3.2,C,语言的,基本数据类型,整型数据及其表示,/*,源程序,*,/,int main(),/*,求两数和主函数*,/,short int a,b,c;,/*,说明,a,、,b,为短整型变量*,/,a=32767;,/*,为变量,a,赋最大值*,/,b=3;,/*,为变量,b,赋值*,/,c=a+b;,/*,计算,a+b,并将结果赋值给,变量,c,*/,printf(c=%dn,c);,/*,输出变量,c,的值*,/,29,3.2,C,语言的,基本数据类型,实型数据及其表示,实数类型,实数基本类型表,单精度型,双精度型,长双精度型,30,3.2,C,语言的,基本数据类型,实型数据及其表示,实型数在计算机中的存放形式,(,十进制实型数据,10,-2,,这里,以十进制表示,计算机中是二进制,),+,0.123456,数符,指数符号,指数,-,2,小数,小数部分,指数部分,31,3.2,C,语言的,基本数据类型,实型数据及其表示,其中,小数部分一般都采用规格化的数据形式,即:小数点放在第一个有效数字前面,使小数部分放小于,1,的纯小数。,单精度实数的精度取决于小数部分的,23,位二进制数位所能表达的数值位数,将其转换为十进制,最多可表示,7,位十进制数字,所以单精度实数的有效位是,7,位。,双精度型用于扩大存储位数,目的是增加实数的长度,减少累积误差,改善计算精度,32,3.2,C,语言的,基本数据类型,实型数据及其表示,实型常量,两种表示形式,小数:,“.”,不可省,指数:,3e-3,e,前有数字,,,e,后是整数,实型常量只能用十进制表示,不能用八进制和十六进制。都是有符号数。,实型数据包括实型常量和实型变量,实型常量一般作为双精度来处理。要表示单精度或长双精度要用,f(F),或,l(L),1e3,、,-123e-6,、,e5,、,e,、,.e-03,X,33,3.2,C,语言的,基本数据类型,实型数据及其表示,实型变量,实型变量的定义,类型说明符 变量名表;,例:,float,a,b,;,double,c,d,;,long double e,f;,34,3.2,C,语言的,基本数据类型,实型数据及其表示,实型变量的有关规则:,什么是数的范围?什么是有效位?,类型说明符,长度,数的范围,有效数字,单精度型,float,4,字节,-,10,38,10,38,7,双精度型,double,8,字节,-,10,308,10,308,15,35,3.2,C,语言的,基本数据类型,实型数据及其表示,2,-23,=|,尾数,|=,+-,&|,条件运算符,C,语言的运算符:,57,第,3,章 数据类型与运算规则,数据对象,+,运算符,表达式,语句,函数,文件,程序,a,b,c,A,=,+,-,&,a+b,c-,d=a+b;,c-;,58,第,3,章 数据类型与运算规则,数据与数据类型,C,语言的,基本数据类型,算术运算与赋值运算,关系运算与逻辑运算,位运算,其它运算,混合运算及数据类型转换,59,3.3,算术运算与赋值运算,语言中的运算规则,运算分量,运算符,x=5 +b *c,对数据进行,运算的符号,被加工,的数据,表达式,+,=,在计算机语言中,所有的运算都是照事先规定的规则进行的,运算的操作规则,包括运算符、表达式和运算过程。,60,3.3,算术运算与赋值运算,表达式的运算结果称为表达式的,值,C,中运算符,算术运算符,赋值运算符,关系运算符,逻辑运算符,位运算,逗号运算符,条件运算符,.,运算符和运算分量构成,表达式,61,3.3,算术运算与赋值运算,学习,运算符,应掌握的要点:,运算符的种类与功能,运算符与运算分量的关系,个数,类型,A+B,(ab),?,a,:,b,目,单目运算,双目运算,三目运算,关系,不同类型的变量,所占存储空间、数的表示范围、有效位和允许的操作不同,62,3.3,算术运算与赋值运算,a+b-c,572,a=b=5,右结合,左结合,x,=a+,b*c,优先级:运算符的执行顺序,单目运算符的优先级通常高于双目和三目运算符,结合性:相同优先级的多个运算符的运算顺序,单目,/,三目运算符,通常是右结合,,双目运算符通常,是左结合,(,赋值运算符除外,),float a=1.,(2)数据溢出;,2 C语言的基本数据类型,把整型数看作为一个二进制序列,按位进行六种运算,整型数据在使用中应注意以下几个问题:,字符串“”多一个0,int i=1,j=7,a;,任何非零实数均作为逻辑上的1,=100,13,加法运算的结果,表达式的,值,即运算结果的值,关系运算的结果,赋值运算的结果?,0,13,64,3.3,算术运算与赋值运算,算术运算符和算术表达式,+,加法运算、正值运算,-,减法运算、负值运算,*乘法运算,/,除法运算,%,求余运算,(,结合性,),1.,参加运算的对象都是,int,型,其结果截取为,int,型,10/3 11/3 1/2,10.0/31./2,10/5*3 10/(5*3),2.,求余运算的对象,必须,是整型,10%3 9%3,10%3 10%,3,(12),(13),65,3.3,算术运算与赋值运算,例,10/3,11/3,1/2,1./2,10.0/3,10/5*3,10/(5*3),10%3,9%3,-10%3,10%-3,-10%-3,3,3,0,6,0,1,0,-1,1,-1,66,3.3,算术运算与赋值运算,算术表达式,C,语言的算术表达式由算术运算符、常量、变量、函数和圆括号组成,,例如:,3+5,12.34-23.65*2,-5*(18%4+6),x/(67-(12+y)*a),67,3.3,算术运算与赋值运算,使用算术表达式时应注意:,双目运算符两侧运算对象的类型必须一致,所得结果的类型与运算对象的类型一致。如果类型不一致,系统将自动按转换规律先对操作对象进行转换,然后再进行相应的运算。,用括号可以改变表达式的运算顺序,左右括号必须配对,多层括号都用圆括号“,()”,表示,运算时先计算内括号中表达式的值,再计算外括号中表达式的值。,68,3.3,算术运算与赋值运算,例:,将下列数学表达式,:,写成符合,C,语言规则的表达式如下,:,(a+b+c)/(sqrt(a)+b*(sin(x)+sin(y)+sin(z),其中,(sqrt(a),和,sin(x),、,sin(y),、,sin(z),都是数学函数的引用,表达式中用了三层括号,以保证表达式的运算顺序。,69,3.3,算术运算与赋值运算,自增自减运算,变量自身加,(,减,)1,优先级,(14),k,=,k,+1,k,+,先,使用,变量,k,的值,,k,再加,1,+,k,k,先加,1,,再,使用,变量,k,的值,k,=,k,-1,k,-,先使用变量,k,的值,,k,再减,1,-,k,k,先减,1,,再使用变量,k,的值,70,3.3,算术运算与赋值运算,自增、自减运算符只能用于变量,不能用于表达式和常量,优先级:高于双目算术运算符,结合性:从右向左,(k+i)+,-3,k=3;printf(“%d”,k+);,输出3后,,,k,的值为4,k=3;printf(“%d”,+k);,输出4,后,,k,的值为,4,自增、自减运算是对变量进行加,1,或减,1,操作后再对变量赋新的值,表达式和常量不能进行赋值操作。,k=6;n=-k+;,n?k?,71,3.3,算术运算与赋值运算,思考,int n=6;,printf(%d,n=%dn,-n+,n);,printf(n=%dn,n);,printf(“n=%d,%dn,n,-n+);,printf(n=%dn,n);,printf(%d,n=%dn,-+n,n);,printf(n=%dn,n);,-6,n=6,n=7,-7,n=6,n=7,n=7,-6,n=7,72,3.3,算术运算与赋值运算,int main(),int a,b,s ;,a=5;b=5;,s=a+b;,printf(“%d,%d,%dn”,a,b,s);,s=a+b;,printf(“%d,%d,%dn”,a,b,s);,s=+a+b;,printf(“%d,%d,%dn”,a,b,s);,s=-a+b;,printf(“%d,%d,%dn”,a,b,s);,s=a-+b;,printf(“%d,%d,%dn”,a,b,s);,s=a+b;,printf(“%d,%d,%dn”,a,b,s);,s=a+b,优先级?,s=a+b,s=a+b,s=a+(+b),73,3.3,算术运算与赋值运算,s=a +b;,s=a+b;,s=+a+b;,s=-a +b;,s=a-+b;,s=a +b;,a=5,b=5,5+5=10,5+5=10,7+5=12,6+5=11,6+5=11,5+5=10,a b s,5 5 10,6 5 10,7 5 12,6 5 11,5 5 11,5 5 10,题目分析:,a,74,3.3,算术运算与赋值运算,int a=2,b=1;,a+=+b;,b=a+b+;,k,=2;,i,=,k,+,k,+;,k,=2;,i,=+,k,+(+,k),;,k,=,4,i,=,4,k,=,4,i,=,8,a=4,b=2,b=a+b,b+,a=4,b=7,75,3.3,算术运算与赋值运算,main(),int,k,=2,i,;,i,=,(k,+,),+,(k,+,),+,(k,+,),;,printf(i=%d,k=%dn,i,k);,k,=2;,i,=,(,+,k),+(+,k,)+(+,k,);,printf(i=%d,k=%dn,i,k);,TC,i=6,k=5,i=15,k=5,i=13,k=5,DC,76,3.3,算术运算与赋值运算,赋值运算符和赋值表达式,将一个常量、一个变量或一个表达式的值赋给一个,变量,x=5,y=x+10,赋值运算符,a+b=12,a+1=12,77,3.3,算术运算与赋值运算,可以将一个实型赋给一个整型,也可将一个整型赋给一个实型,类型转换中的“赋值转换”,接受赋值的变量类型决定了运算结果的存储类型,int x;x=5.3;x,的值为,5,float y;y=5;y,的,值为,5.000000,78,3.3,算术运算与赋值运算,复合的赋值运算,赋值运算的优先级,(2),赋值运算的结合性,比算术运算低,只比逗号运算高,从右向左,x,=y=5,x=x+n x+=n,赋值运算符两侧出现相同的变量,int a=b=5;,int a,b;,a=b=5;,79,3.3,算术运算与赋值运算,x=x+n,x=x-n,x=x*n,x=x/n,x=x%n,x+=n,x-=n,x*=n,x/=n,x%=n,算术运算与赋值运算相结合,x,与,n,均,为整数,80,3.3,算术运算与赋值运算,赋值表达式,变量名,=,表达式,求解过程,:,(1),先计算右边表达式的值;,(2),将计算结果赋给左边的变量。,例,:,a*=b+5,a=a*b+5,?,a=a*(b+5),a=b+5,81,3.3,算术运算与赋值运算,赋值表达式的值,int a,b;,a=b=85;,if(a=100),if(a=100),82,第,3,章 数据类型与运算规则,数据与数据类型,C,语言的,基本数据类型,算术运算与赋值运算,关系运算与逻辑运算,位运算,其它运算,混合运算及数据类型转换,83,3.4,关系运算与逻辑运算,计算机具有逻辑判断能力,其判断的依据是计算机内部进行逻辑运算的结果。,C,提供了关系运算和逻辑运算,用来构造,C,程序控制中的条件,实现程序的选择结构和循环结构控制。,关系运算和逻辑运算的结果都是逻辑值,即“真”和“假”。,C,语言中没有专用的逻辑值,用整数值,1,和,0,标识逻辑,真,和,假,。,在,C,语言中,将,非,0,就视为“,真,”。,84,3.4,关系运算与逻辑运算,关系运算符与关系表达式,关系运算符,关系运算是一种比较运算,将两个值,(,表达式,),进行比较,判断比较的结果是否符合给定的条件,大于,大于等于,=,,小于,,,不等,!=,,小于等于,,,=,,,bc,85,3.4,关系运算与逻辑运算,关系表达式,关系表达式的结果是一个逻辑值,,根据关系是否满足分别取真,1,或假,0,结果:,2,e1,关系运算符,e2,100,=,1,c,5*18,=,90,!=,int i=1,j=7,a;,a=i+(j%4!=0),a,的值?,例,:,86,3.4,关系运算与逻辑运算,例:,int main(),float a=1.1,b;,b=a/2.0;,b=b*2.0;,if(b=1.1)printf(“b=an”);,else printf(“b!=an”);,return 0;,不要用,=,判断两个浮点数是否相等,而是:,|a b|b),ab,(y|b),y|b,例:,a=5,b=7,c=4,d=3,x=(a+b)(c+d)&(da),先,做算术运算,,再做关系判断,,再做逻辑运算,,将最后结果赋给,x,x,的值?,0,e1,逻辑运算符,e2,任何非零实数均作为逻辑上的,1,用逻辑运算符将关系运算表达式或逻辑量连接起来构成逻辑表达式,,逻辑表达式的值是,1,或,0,,表示真或假,89,3.4,关系运算与逻辑运算,4321,从左向右运算,(43),逻辑值为,1,(12),逻辑值为,0,(01),逻辑值为,0,整个表达式的值为,0,例,:,90,3.4,关系运算与逻辑运算,a=1,b=2,c=3,d=4,m=1,n=1,执行,(m=ab)&(n=cd),之后,m=?n=?,m=0,n=1,例:,在逻辑表达式中,并不是所有的逻辑运算都必须执行:,如果,&,的一边已经为,0,,,结果一定为,0,,,&,后面的就不做了;,如果,|,的一边已经为,1,,,结果一定为,1,,后面的也不做了,91,3.4,关系运算与逻辑运算,14&47,44,!(23)|!(2b),练习,93,3.4,关系运算与逻辑运算,练习:用,C,语言描述,1,)a,小于,b,或小于,c,,但,a,和,b,都大于,d,2)a,和,b,中有一个大于,c,3)a,是非正整数,4)a,是奇数,5)a,不能被,b,整除,6),a,是,带小数的正数,,b,是,带小数的负数,如何表示闰年,能够被,4,整除同时不能被,100,整除,能够被,400,整除,或,94,3.4,关系运算与逻辑运算,条件运算符与条件表达式,例:符号函数,sign,的数学定义如下:,对应的,C,函数定义如下:,double sign(double x),return x0?1:(x=0?0:-1);,95,3.4,关系运算与逻辑运算,条件运算符,唯一的三目运算符,e1?e2:e3,判断表达式,1,的值,若为非,0(,真,),,将表达式,2,的值作为整个条件表达式的结果;否则,将表达式,3,的值作为整个表达式的结果,。,功能:,x=(ab)?a:b,当,a=9,b=5,时,条件表达式的值为,9,,,x=9,注意:,e2,、,e3,不是都要计算。,96,3.4,关系运算与逻辑运算,高于赋值,低于其它,(3),优先级:,结合性:从右向左,a=5,b=4,c=3,d=2,x,=(ab)?a:(ad)?c:d,x,=(ab)?,a,:,(,(,ad)?c:d,),x,=,(,(ab)?a:(ad),),?,c:d,数据类型可以不同,97,3.4,关系运算与逻辑运算,if,语句与条件运算的关系,例:求一个数字的绝对值,if(y0),x=-y;,else,x=y;,(,y0)?x=-y:x=y;,等价,等价,x=(y0)?-y:y;,说明:,if else,可以完成与条件运算符,(?:),完全相同的任务,并且可以进行相应的转换。,98,第,3,章 数据类型与运算规则,数据与数据类型,C,语言的,基本数据类型,算术运算与赋值运算,关系运算与逻辑运算,位运算,其它运算,混合运算及数据类型转换,99,3.5,位运算,位运算的基本概念,把整型数看作为一个二进制序列,按位进行六种运算,0010 0000 0101 0011,100,3.5,位运算,位运算符,运算符含义 对象个数结合方向 优先级,按位求反单目右,(14),按位右移双目左,(11),&,按位与双目左,(8),|,按位或双目左,(6),按位异或双目左,(7),位运算应用于整型数据,即把整型数据看成是固定的二进制序列,然后对这些二进制序列进行按位运算。,101,3.5,位运算,按位逻辑运算,按位与运算,&,按位或运算,|,a:1010,1001,0101,0111,&b:0110,0000,1111,1011,c:0010,0000,0101,0011,a:1010,1001,0101,0111,|b:0110,0000,1111,1011,c:1110,1001,1111,1111,102,3.5,位运算,按位异或运算,按位求反运算,a:1010,1001,0101,0111,b:0110,0000,1111,1011,c:1100,1001,1010,1100,a:1010,1001,0101,0111,c:0101,0110,1010,1000,103,3.5,位运算,按位逻辑运算的应用,用,&,屏蔽特定位,(,将特定位清为,0),用,&,保留特定位,用,|,将特定位置为,1,用,将特定位翻转,请课后看例题,104,3.5,位运算,设,int x=7,,求,y=x,例:,y=x=7=(0000,0000,0000,0111),=1111,1111,1111,1000 =-8,对,x,的值,(7),按位求反结果恰为,-8,的补码表示,其原因是计算机中有:,整数求负,=,整数求补,=,按位求反,+1,所以:按位求反,=,整数求负,-1,。,注意求反运算与取负和逻辑非运算的区别:,y=-x;,结果为:,y=-7,,,y=!x;,结果为:,y=0,。,105,3.5,位运算,移位运算,x n,左移和右移,:把整数作为二进制位序列,求出把这个序列左移或者右移若干位所得到的序列。,其中,x,为移位运算对象,是要被移位的量;,n,是要移动的位数。数据左移后空出来的位置补,0,,右移后对无符号数补,0,,,有符号数正数补,0,,负数补,1,。,a:1101,0011,b=a2:,00,01,0011,左移位或右移位相当于整数乘以或除以,2,的幂,106,3.5,位运算,位运算赋值运算符,x=x&n,x=x|n,x=xn,x=xn,x&=n,x|=n,x =n,x=n,位运算与赋值运算相结合,107,第,3,章 数据类型与运算规则,数据与数据类型,C,语言的,基本数据类型,算术运算与赋值运算,关系运算与逻辑运算,位运算,其它运算,混合运算及数据类型转换,108,3.6,其它运算,逗号运算符,(e1,e2,e3,e,n,),用于连接几个表达式,求解过程:顺序求解几个表达式,优先级,(15),逗号运算符的优先级最低,结合性:,左结合,x,=(a=4*5,a*2),a+6),逗号表达式的值为最后一个表达式的值,109,3.6,其它运算,.,和,-,运算符,作用是引用构造数据类型的结构和联合中的分量,即表示结构体或联合中的成员变量。其形式为:,结构体名,.,结构体成员名 或,结构体名,-,结构体成员名,例如:,stu.num stu,-,num,110,3.6,其它运算,(),和,运算符,“()”,运算符常使用于表达式中,其作用是改变表达式的运算次序;也可在强制类型转换运算或,sizeof,运算中使用,另外还可用于函数的参数表。,“,”,被称为下标运算符,用于数组的说明及数组元素的下标表示。,111,3.6,其它运算,*,和,&,运算符,“*”,是指针运算符,其含义是访问指针所指向的内容。“,&”,是地址运算符,其含义是取指定变量的地址。“*”和“,&”,运算符使用的一般形式为:,*指针变量,&,内存变量,“*,指针变量,”的功能是访问指针变量所指的内容,“,&,内存变量,”的功能是取出指定内存变量的地址,例如:,*,pc&a,112,第,3,章 数据类型与运算规则,数据与数据类型,C,语言的,基本数据类型,算术运算与赋值运算,关系运算与逻辑运算,位运算,其它运算,混合运算及数据类型转换,113,3.7,混合运算及数据类型转换,数据类型转换是由语言的编译系统自动完成的,是一种“隐式的”自动类型转换,这种“隐式的”类型转换不会体现在语言源程序中。但是,语言程序设计人员必须了解这种自动转换的规则及其结果,否则会引起对程序执行结果的误解。,114,3.7,混合运算及数据类型转换,各类数值型数据间的混合运算,:,将不同数据类型先转换成同一类型,然后进行运算。,自动进行,隐式转换,强制进行,显式转换,隐式转换,(,算术转换,),低级类型向高级类型转换,规则,方式,115,3.7,混合运算及数据类型转换,double,float,long,unsigned,int,char,精度高,精度低,2.0+1/2;,表达式的,值?,例:,116,3.7,混合运算及数据类型转换,int,double,已知:int i;long e;float f;double d;,f=10+,a,+i*f-d/e,double,f,的类型?,例:,注意:运算过程中的类型转换不是变量本身数据类型的转换,double,double,float,117,3.7,混合运算及数据类型转换,强制类型转换,(,类型标识符,),表达式,(,int)(,10+a+i*f-d/e),将该结果强制转换为整型,还可以赋值转换,,输出转换等,转换形式:,118,main(),float x,y,a,b,c;,a=123456789.1234567;,b=123.1234567;,c=12345.123456789;,printf(%f,%en,x+y,x+y);,printf(%f,%f,%fn,a,b,c);,printf(%gn,x+y);,printf(%g,%g,%en,a,b,c);,getch();,
展开阅读全文