第3章基本数据类型与数据运算精选文档.ppt
第第3章基本数据类型与数据运算章基本数据类型与数据运算本讲稿第一页,共三十三页3.2 3.2 数据类型数据类型基本基本数据数据类型类型整型整型可根据内存长度和有无符号细分可根据内存长度和有无符号细分实型实型/浮点型浮点型分单精度和双精度两种分单精度和双精度两种字符型字符型存放存放ASCII码码,分有分有/无符号两种无符号两种指针类型指针类型又称地址类型又称地址类型,存放变量地址存放变量地址空类型空类型主要用于函数返回值类型和指针主要用于函数返回值类型和指针构造构造数据数据类型类型数组类型数组类型在基本数据类型的基础上构造而在基本数据类型的基础上构造而成,枚举类型亦有说为基本数据成,枚举类型亦有说为基本数据类型类型结构体类型结构体类型公用体类型公用体类型枚举类型枚举类型C中没有中没有bool型型(逻辑型逻辑型),进行逻辑运算时零代表假,非零代表真进行逻辑运算时零代表假,非零代表真本讲稿第二页,共三十三页整型整型:整型分类整型分类类型说明符类型说明符内存内存长度长度表示范围表示范围有符号短整型有符号短整型signed short int16-3276832767(教材错)(教材错)无符号短整型无符号短整型unsigned short int16065535(教材错)(教材错)有符号长整型有符号长整型signed long int32-21474836482147483647无符号长整型无符号长整型unsigned long int3204294967295有符号基本整型有符号基本整型signed int16/32-3276832767-21474836482147483647无符号基本整型无符号基本整型unsigned int163206553504294967295无符号数直接转换为二进制存储无符号数直接转换为二进制存储,高端补高端补0;有符号数存储补码;有符号数存储补码本讲稿第三页,共三十三页实型:参照实型:参照IEEE754IEEE754标准标准分类内存长度符号位S指数E(阶码)尾数M单精度 float32最高位次8位,真值指数e-126,127;阶码E=e+1271,254低端剩余各位存储纯小数部分,隐含小数点前.如此能使得精度更高.23+1/52+1双精度double64最高位次11位,真值指数e-1022,1023;阶码E=e+10231,2046特殊情况0.0:S=0/1;E全0;M全0;:S=0/1;E全1;M全0;NAN:S=0/1;E全1;M非0转化为十进制后,精度分别为7位,15-16位本讲稿第四页,共三十三页字符型与字符串常量字符型与字符串常量:数据类型数据类型类型说明符类型说明符内存内存长度长度字符范围字符范围有符号字符型有符号字符型signed char8可表示可表示256个字符,个字符,前前128个同个同ASCII.后后128不同系统有所不不同系统有所不同同无符号字符型无符号字符型unsigned char8字符型常量是用单引号括起来的单个字符,如字符型常量是用单引号括起来的单个字符,如char c=a,a=a字符型变量的内存单元中实际存放字符的字符型变量的内存单元中实际存放字符的ASCII码码,如上例存如上例存97由于字符型数据实际对应一整数由于字符型数据实际对应一整数,故字符型与整型有时可通用:故字符型与整型有时可通用:int i=a;char c=97;int j=a-32;char b=c-32;数值范围的理解数值范围的理解:有符号字符型-128到127,无符号0-255本讲稿第五页,共三十三页3.3 3.3 常量与变量常量与变量p常量:程序运行过程中不可变的量常量:程序运行过程中不可变的量整型 5-12 010-010 0 x2-0 x2F 50U -123L 实型 3.14 12.5 12.3e3 -1E4 2.3f字符型a A 2$n 101 x2A字符串“study hard!”“a”整型默认为signed int型,后加U或L可改变类型;有十/八/十六进制三种写法实型默认为double型,后可加f指定为float型,分小数形式和指数形式两种;指数形式表示时E或e前不能空,e后为整数字符型常量默认为signed char;分普通字符和转义字符两种.具体看书自学字符串常量是”括起来的串,末位自动添加结束符0,务必区分A与”A”注意:-32768U与-32768在寄存器中存储结构一样,均为FF FF 80 00。区别在于,设有Unsigned x;则x=-32768会有警告,而x=-32768U无警告97 0本讲稿第六页,共三十三页3.3 3.3 常量与变量常量与变量p符号常量符号常量:用标识符代替一个常量用标识符代替一个常量(给常量起名给常量起名)#define PI 3.14#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define NULL 0#include#include#define PRICE 30#define PRICE 30void main()void main()int num,total;int num,total;num=10;num=10;total=num*PRICE;total=num*PRICE;printf(total=%dn,total);printf(total=%dn,total);使用目的:见名知意使用目的:见名知意,一改全改一改全改标识符命名规则:由字母、数字和下划线组成标识符命名规则:由字母、数字和下划线组成,以字母和以字母和下划线开头,不能与系统保留字下划线开头,不能与系统保留字(3.1)重名。通常不多于重名。通常不多于8 8个个字符。不仅符号常量名,变量名和函数名亦遵循此规则字符。不仅符号常量名,变量名和函数名亦遵循此规则规范:符号常量名通常全部大写规范:符号常量名通常全部大写,变量名和函数名首字母变量名和函数名首字母小写小写,若由多个单词组成则剩余单词首字母大写。若由多个单词组成则剩余单词首字母大写。注:符号常量在编译阶段直接被替换为所代表的常数,不注:符号常量在编译阶段直接被替换为所代表的常数,不为其分配内存为其分配内存,不能赋值。不能赋值。符号常量定义语句后无分号符号常量定义语句后无分号本讲稿第七页,共三十三页3.3 3.3 常量与变量常量与变量p变量变量:程序运行中值可变的量。程序运行中值可变的量。注:变量实际对应内存中一个内存块,块大小由变量注:变量实际对应内存中一个内存块,块大小由变量类型决定类型决定,根据变量名可找到对应的内存块根据变量名可找到对应的内存块注:为变量赋值就是根据变量名找到相应内存块,之注:为变量赋值就是根据变量名找到相应内存块,之后将数据后将数据(位于累加器位于累加器)写入其中;取变量的值就是通过写入其中;取变量的值就是通过变量名找到相应的内存块,从中读取数据到变量名找到相应的内存块,从中读取数据到CPUCPU命名规范:遵循标识符命名规则,最好见名知义命名规范:遵循标识符命名规则,最好见名知义注注:必须先定义后使用必须先定义后使用;一次可定义多个同类型的变量一次可定义多个同类型的变量;使用前通常赋初值使用前通常赋初值,可定义同时赋值可定义同时赋值(如如int i=0)int i=0)short flag;int i,j,k;long factorial;unsigned count;float x,y;double average;char c;unsigned char a;本讲稿第八页,共三十三页作业说明:作业说明:l求最大最小值求最大最小值l辗转相除辗转相除l级数求和级数求和l素数素数+Fibnacci数列数列+回文回文+水仙花数?水仙花数?本讲稿第九页,共三十三页3.4 3.4 基本数据类型的转换基本数据类型的转换p自动类型转换自动类型转换:某些类型的数据一旦参与运算(即进入进入CPU寄存寄存器器时),或者不同类型的数据进行混合运算时,数据类型就会发生自动转换,称之为自动类型转换p转换规则转换规则:范围小到大范围小到大,等值转换等值转换(不同编译器规则不尽同不同编译器规则不尽同,VC如下如下)punsigned char/short进CPU自动转为unsigned int;【高位补零高位补零】p signed char与short进CPU时自动转换为等值int;【符号位扩展符号位扩展】p float进CPU直接转为double;【指数部分与尾数部分分别扩充指数部分与尾数部分分别扩充】p无论哪种整型与double型混合运算,整型均转为等值double型 其余:类型长短不一时,以较长的为准,长度相同时,有符号的转化为无符号的,如32767+1L结果32768L;再如a=-1L;b=1U;则则abp例:234-b+26.5本讲稿第十一页,共三十三页3.4 3.4 基本数据类型的转换基本数据类型的转换p强制类型转换强制类型转换:通过类型转换语句显式进行转换通过类型转换语句显式进行转换(目目标类型标类型)(变量或表达式变量或表达式)注注:对变量进行强制类型转换时只是在对变量进行强制类型转换时只是在CPU寄存器中对变量值作临时转换寄存器中对变量值作临时转换,变量类型及其在内存中的数据保持不变变量类型及其在内存中的数据保持不变,如以下语句执行后如以下语句执行后x仍为仍为float型,型,值仍然为值仍然为3.5:float x=3.5;int i=(float)x;注注:假设假设float x=3.5,y=3.5;则则(int)x+y为实数值为实数值6.5;而而(int)(x+y)值为值为7#include void main()printf(%dn,(int)3.5);printf(%dn,(int)-3.5);printf(%lfn,(double)3);printf(%lfn,(double)-3);printf(“%lfn”,5/3);/不匹配不匹配,结果错结果错printf(%lfn,(double)5/3);/注注:printf(“%lfn”,1)输出输出0.000000本讲稿第十二页,共三十三页 double型值型值=float变量:指数部分与尾数部分分别截取,转换变量:指数部分与尾数部分分别截取,转换成十进制相当于截取其前成十进制相当于截取其前7位有效数字位有效数字double值值=整型变量整型变量:舍弃小数部分舍弃小数部分,存整数部分存整数部分整型数据整型数据=实型变量实型变量:以等值的浮点数形式存储以等值的浮点数形式存储各类整型、字符型之间:先将右侧值读入寄存器(遵循前述自各类整型、字符型之间:先将右侧值读入寄存器(遵循前述自动类型转换规则动类型转换规则,VC下内存位数不足下内存位数不足4字节者均扩展成字节者均扩展成4字节字节,有符号有符号数按符号位扩展数按符号位扩展,无符号数作零扩展。无符号数作零扩展。TC下字符型扩充成下字符型扩充成2字节字节),之后之后截取截取相应数目的字节放入左侧变量空间相应数目的字节放入左侧变量空间补充:不同类型数据间的相互赋值补充:不同类型数据间的相互赋值char c1,c2;/以下是VC下过程分析,TC下将下划线部分去掉c1=300;/R(300)=0 x00 00 01 2C;M(c1)=0 x2Cc2=400;/R(400)=0 x00 00 01 90;M(c2)=0 x90printf(“%c%cn”,c1,c2);/R(c1)=00 00 00 2c,/R(c2)=ff ff ff 90;截取末字节,VC输出,?;TC输出,printf(“%d%dn”,c1,c2);/R(c1)=00 00 00 2c,/R(c2)=ff ff ff 90;分别是44和-112补码,输出44与-112本讲稿第十三页,共三十三页补充:格式化输出函数补充:格式化输出函数printfprintf说明说明p正常情况:正常情况:格式控制符格式控制符%d用于输入输出有符号整型数用于输入输出有符号整型数,%u用用于无符号整型数于无符号整型数,%X或或%O以十六或八进制输出各类整型;以十六或八进制输出各类整型;%f用用于于float,%lf用于用于double,%c用于用于charp原理说明原理说明:输出值先进入寄存器输出值先进入寄存器(可能要扩充可能要扩充),以,以c输出则截取输出则截取寄存器最末一字节输出其对应的字符;以寄存器最末一字节输出其对应的字符;以d输出意味着将寄存器中输出意味着将寄存器中的数据当作的数据当作signed int的补码的补码,输出此补码对应的真值;以输出此补码对应的真值;以u输输出意味着将寄存器中的数据当作一个出意味着将寄存器中的数据当作一个unsigned int,直接转换,直接转换为十进制数后输出;为十进制数后输出;以以X输出则将寄存器中的二进制数从低到高输出则将寄存器中的二进制数从低到高四位合一位输出,高位零省略;以四位合一位输出,高位零省略;以O则三位合一位输出则三位合一位输出short a;unsigned short c;short e;/以下VC下分析,TC去下划线a=100;/*R(100)=0 x00 00 00 64;M(a)=0 x00 64*/e=50000;/*R(50000)=0 x00 00 C3 50;M(e)=0 xC3 50*/c=a=e;/*R(e)=0 x ff ff C3 50;M(a)=0 xC3 50*/*R(a)=0 xFF FF C3 50;M(c)=0 xC3 50*/printf(“%dn”,a);/*R(a)=0 xFF FF C3 50;输出-15536*/printf(“%u n”,c);/*输出50000*/printf(“%xn”,a);/R(a)=0 xFFFFC350,VC:ffffc350,TC:C350printf(“%o n”,c);/*R(c)=0 x00 00 C3 50;输出141520*/本讲稿第十四页,共三十三页作业作业1:1:分析如下程序的执行过程与输出结果分析如下程序的执行过程与输出结果(似前例似前例,参考作业说明参考作业说明)#includevoid main()short a,b;unsigned short c,d;long e,f;a=100;/*R(100)=(00 00 00 64)16,截取得,截取得M(a)=(00 64)16*/b=-100;e=50000;f=32767;c=a;d=b;printf(“%d,%dn”,a,b);/*R(a)=(00 00 00 64)16,是,是100的补码;的补码;R(b)=/(ff ff ff 9C)16,是,是-100的补码的补码,输出输出100,-100*/printf(“%u,%un”,a,b);printf(“%u,%un”,c,d);c=a=e;d=b=f;printf(“%d%dn”,a,b);printf(“%u%un”,c,d);printf(“%x%Xn”,a,b);printf(“%o%on”,c,d);本讲稿第十五页,共三十三页3.5 3.5 运算符和表达式运算符和表达式表达式:运算符和运算对象按一定规则结合在一起形成的式子表达式:运算符和运算对象按一定规则结合在一起形成的式子记:表达式具有值记:表达式具有值(运算结果运算结果)和类型和类型,如如3*5值为值为15,类型为,类型为int本讲稿第十六页,共三十三页3.5.23.5.2算术运算符和算术表达式算术运算符和算术表达式算术运算符算术运算符:+-*/%(双目双目)+-(单目单目)除运算符除运算符/:分子分母均整型时是整除分子分母均整型时是整除.取余运算符取余运算符%:操作数均整型方可操作数均整型方可,否则编译错否则编译错.分子分母有负数时分子分母有负数时,先求绝对值之商先求绝对值之商,后根据分子定符号后根据分子定符号:15%4为为3;15%(-4)为为3;(-15)%4为为-3;(-15)%(-4)为为-3自增运算符自增运算符+:变量自增运算符变量自增运算符,操作对象必须为变量操作对象必须为变量,如如x+或或+x,但,但(x+y)+错。错。x+是先用后增是先用后增,先将变量的值读入寄存器参与运先将变量的值读入寄存器参与运算算,当前语句结束后再将内存中当前语句结束后再将内存中x的值增的值增1;+x先增后用先增后用,先将内先将内存中变量值增存中变量值增1后进入运算器参与运算后进入运算器参与运算自减运算符自减运算符-:类似自增运算符,只是变量减小类似自增运算符,只是变量减小1运算符运算符+-均单目运算符均单目运算符,优先级高于其它算术运算符优先级高于其它算术运算符,且均为且均为右结合右结合。如。如i=3;j=-i+;i=3;j=-i+;相当于相当于j=-(i+);j=-(i+);算术表达式算术表达式:用括号、算术运算符和运算对象连接起来的符号用括号、算术运算符和运算对象连接起来的符号C C语语法规则的式子法规则的式子int x=3,y;y=(x+)+(x+)+(x+);printf(nx=%d,y=%d,x,y);int x,y,a,b,c;x=3;a=x+;b=x+;c=x+;y=a+b+c;printf(nx=%d,d=%d,x,y);本讲稿第十七页,共三十三页作业作业2 2:l3.3:1 3 5 6l提示:开平方根函数为提示:开平方根函数为sqrt,如求变量如求变量x的的平方根赋值给平方根赋值给y,可写作,可写作y=sqrt(x),注意注意头文件包含与变量类型头文件包含与变量类型本讲稿第十八页,共三十三页3.5.33.5.3赋值运算符与赋值表达式赋值运算符与赋值表达式赋值运算符赋值运算符:简单赋值运算符:简单赋值运算符=;复合赋值运算符复合赋值运算符+=*=等等 如:如:x=3;x+=3相当相当x=x+3;x%=y+3相当相当x=x%(y+3)不同类型的赋值不同类型的赋值:double-float double-整型整型 整型整型-实型实型 各整型、字符型之间各整型、字符型之间注注:赋值语句右侧可为任意表达式:赋值语句右侧可为任意表达式,左侧必须为变量左侧必须为变量注注:赋值表达式:赋值表达式类型与值取决于左侧变量类型与值取决于左侧变量.如如 char c;printf(“%d”,c=400);显示显示-112.注注:赋值表达式可作变量用,相当于左侧变量,如:赋值表达式可作变量用,相当于左侧变量,如(a=3*5)=4*6可可,a=3*5=4*6错错注注:赋值语句具有右结合性。优先级比常见运算符都低赋值语句具有右结合性。优先级比常见运算符都低 char c;i=c=259;a=(b=4)+(c=6)a+=a-=a*a相当于相当于a=a+(a=a-a*a);赋赋值值表表达达式式不不同同于于赋赋值值语语句句,printf(“%d”,i=3);合合 法法,而而printf(“%d”,i=3;);不合法不合法本讲稿第二十页,共三十三页关系运算符及其优先次序关系运算符及其优先次序:=!=格式:格式:如 30 x0 i=0 x!=y注:注:关系运算成立时结果为关系运算成立时结果为1,不成立时结果为不成立时结果为0。注注:=是判断相等,=是赋值,前者返回0或1,后者返回左侧变量值。C语言中判断一个量时认为零为假,非零为真零为假,非零为真。如if(i=0)printf(“Never Visible!”);if(i=0)printf(“Visible if i equals zero!”)if(i=1)printf(“Always visible!”);if(i=1)printf(“Visible if i equals one!”)注注:左结合,优先级整体上低于算术运算符,高于赋值运算符。内部而言,=和!=低于其它 b+c,(a=3)(b=5),ab=c,a=bc,532#includevoid main()int a=123,b=234,c=345,d=456;int t1,t2,t3;t1=ab;t2=c!=d;t3=a=c-d;printf(t1=%d,t2=%d,t3=%dn,t1,t2,t3);本讲稿第二十一页,共三十三页逻辑运算符逻辑运算符:!(逻辑非)&(逻辑与)|(逻辑或)格式:格式:如如x0&y0 x0|y0&x10 !(x3&84-!0 值为0!(ay;ab&ac|ab)&(n=cd)后,m的值为0,而n的值仍为1。本讲稿第二十三页,共三十三页格式格式:表达式?表达式表达式功能功能:表达式1成立吗(非零),成立则结果为表达式2的值,否则结果为表达式1的值如:max=ab?a:b;或 min=ab?a:cd?c:dab?a:cd?c:d理解为理解为ab?a:(cd?c:dab?a:(cd?c:d)(3)(3)条件表达式还可是赋值表达式或函数表达式,如:条件表达式还可是赋值表达式或函数表达式,如:x0?y=x:y=-x;x0?y=x:y=-x;x0?printf(“%d”,y=x):printf(“%d”,y=-x);x0?printf(“%d”,y=x):printf(“%d”,y=-x);(4)(4)三个表达式的类型可各不相同,返回值类型为后两个表达式中三个表达式的类型可各不相同,返回值类型为后两个表达式中较高的类型,如较高的类型,如xy?1:1.5xy?1:1.5;当;当xyxy时返回时返回1.01.03.5.6 3.5.6 条件运算符与条件表达式条件运算符与条件表达式本讲稿第二十四页,共三十三页功能功能:顺序:顺序“计算计算”各表达式,整个式子的值和类型取决于最末各表达式,整个式子的值和类型取决于最末一个表达式一个表达式优先级和结合性优先级和结合性:左结合,:左结合,优先级最低优先级最低格式格式:表达式,表达式,表达式,表达式,表达式例:i1,sum=0例例:比较:比较 printf(“%d”,x=(3,6*3)与与 printf(“%d”,(x=a=3,6*3);3.5.7 3.5.7 逗号运算符和逗号表达式逗号运算符和逗号表达式说明说明:逗号表达式最常用于:逗号表达式最常用于for循环中。如循环中。如 for(i=1,sum=0;i=100;+i)sum=sum+i;本讲稿第二十五页,共三十三页3.5.83.5.8位运算符与位表达式位运算符与位表达式自学:自学:一要掌握各种位运算的运算规则;一要掌握各种位运算的运算规则;二要掌握各种位运算的用途二要掌握各种位运算的用途自学不一定不考!要注重自学能力的培自学不一定不考!要注重自学能力的培养,充分利用各种学习手段!养,充分利用各种学习手段!本讲稿第二十六页,共三十三页3.5.9 3.5.9 取长度运算符取长度运算符格式格式:sizeof(类型名或表达式类型名或表达式)功能功能:返回指定类型或者表达式类型在内存中所占返回指定类型或者表达式类型在内存中所占字节字节数数如如:sizeof(short)值为值为2;sizeof(int)在在VC下值下值4,TC下下值值2;sizeof(3.0)值值8;sizeof(x)由变量由变量x类型定,若类型定,若x为为float型,则值型,则值4本讲稿第二十七页,共三十三页运算符的优先级和结合性运算符的优先级和结合性l说明:说明:P89表表3.9中部分运算符尚未学中部分运算符尚未学,总结常见运算符总结常见运算符的优先级和结合性规律即可的优先级和结合性规律即可l优先级:优先级:单目单目(+-!)算术算术 关系关系 逻辑逻辑 条件条件 赋值赋值 逗号逗号l结合性:结合性:单目运算符与三目运算符是右结合,双目运算符中仅单目运算符与三目运算符是右结合,双目运算符中仅赋值赋值运算符是右结合运算符是右结合,其余左结合,其余左结合本讲稿第二十八页,共三十三页3.6 3.6 应用举例应用举例例例3.27 设设k4 k5 k6 k7各变量初值均为各变量初值均为10;则经过语句;则经过语句k4+=k5-=k6*=k7/=2;各变量值为多少?各变量值为多少?依次为:依次为:-30 -40 50 5例例3.28:分析运行结果分析运行结果#include void main()int a,b,c,d;a=118866-!99;b=!(11!(8866-!99);c=1122%3&33|44!=8866-!99;d=1122%3&33|44!=8866-!99=0;printf(a=%d,b=%d,c=%d,d=%dn,a,b,c,d);/运行结果:运行结果:a=1,b=1,c=1,d=0本讲稿第二十九页,共三十三页3.6 3.6 应用举例应用举例例例3.29:分析程序运行结果:分析程序运行结果t是跳到从当前位置开始的下一个水平制表位。所谓水是跳到从当前位置开始的下一个水平制表位。所谓水平制表位是指屏幕上的第平制表位是指屏幕上的第1列、第列、第9列、第列、第17列等列等8*i+1列;列;b相当于键盘上的相当于键盘上的backspace键,它将会删除当前光标位置前键,它将会删除当前光标位置前的一个字符。但是,若当前光标前是一个的一个字符。但是,若当前光标前是一个t,则将此,则将此t产生的产生的空格一次性都删除。空格一次性都删除。#include void main()char x,y,z,s;x=p;y=m;z=n;s=376;/*376代表的字符非标准代表的字符非标准ASCII码字符码字符,输出输出不定不定*/printf(%c%c%c%cn,x,y,z,s);printf(%ct%ct%ct%cn,x,y,z,s);printf(%cn%cn%cn%cn,x,y,z,s);本讲稿第三十页,共三十三页3.6 3.6 应用举例应用举例例例3.30 分析程序运行结果分析程序运行结果#include void main()int x,y=66;float f=12.3;x=(int)f+88+-y*66;printf(x=%d,y=%d,f=%fn,x,y,f);输出结果:输出结果:x=4390,y=65,f=13.300000本讲稿第三十一页,共三十三页教材问题说明:教材问题说明:l上课认真听,课下抓紧回顾上课认真听,课下抓紧回顾l以下为已发现之问题,不代表全部以下为已发现之问题,不代表全部l本讲稿第三十二页,共三十三页作业作业1 1答案答案:#includevoid main()short a,b;unsigned short c,d;long e,f;a=100;/*R(100)=(00 00 00 64)16,截取得M(a)=(00 64)16*/b=-100 /*R(-100)=(ff ff ff 9C)16,截取得M(b)=(ff 9C)16*/e=50000 /*R(50000)=(00 00 C3 50)16,得M(e)=(00 00 C3 50)16*/f=32767;/*R(32767)=(00 00 7f ff)16,得M(f)=(00 00 7f ff)16*/c=a;/*先将a读入寄存器得R(a)=(00 00 00 64)16,后截取得M(c)=(00 64)16*/d=b;/*先将b读入寄存器得R(b)=(ff ff ff 9C)16,后截取得M(d)=(ff 9C)16*/printf(“%d,%dn”,a,b);/*先将a读入寄存器得R(a)=(00 00 00 64)16,这是100的补码;同样,将b读入寄存器得R(b)=(ff ff ff 9C)16,这是-100的补码*/printf(“%u,%un”,a,b);/*先将a读入寄存器得R(a)=(00 00 00 64)16,以以u输输出出意意味味着着将将寄寄存存器器中中的的数数据据当当作作一一个个无无符符号号的的二二进进制制数数,将将其其直直接接转转换换为为十十进进制制数数后后输输出出,(00 00 00 64)16按位权展开求和后得100;而R(b)=(ff ff ff 9C)16,转换为十进制得4294967196*/printf(“%u,%un”,c,d);/*注意c与d为无符号变量,读入寄存器时扩充零,将c读入寄存器得R(c)=(00 00 00 64)16;而R(d)=(00 00 ff 9C)16,转换为十进制得65436*/c=a=e;/*R(e)=(00 00 C3 50)16,截取得M(a)=(C3 50)16,R(a)=(ff ff C3 50)16,截取得M(c)=(C3 50)16*/d=b=f;/*R(f)=(00 00 7f ff)16,截取得M(b)=(7f ff)16,R(b)=(00 00 7f ff)16,截取得M(b)=(7f ff)16*/printf(“%d%dn”,a,b);/*R(a)=(ff ff C3 50)16,此补码对应真值为-15536;R(b)=(00 00 7f ff)16,此补码对应真值为32767;*/printf(“%u%un”,c,d);/*R(c)=(00 00 C3 50)16,转为十进制得50000;R(d)=(00 00 7f ff)16,转为十进制得32767;*/printf(“%x%Xn”,a,b);/*R(a)=(ff ff c3 50)16,以x输出则将寄存器中的二进制数从低到高四位合一位进行输出,得ffffc350;R(b)=(00 00 7f ff)16,以X类似得7FFF。注意高位的零省略*/printf(“%o%on”,c,d);/*R(c)=(00 00 C3 50)16,以o输出则将寄存器中的二进制数从低到高三位合一位进行输出,得141520;R(d)=(00 00 7f ff)16,输出77777注意高位的零省略*/本讲稿第三十三页,共三十三页