




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章数据的种类数据类型,计算机如何识数数制 整型 字符型 浮点型 类型转换 综合应用类型转换 跟我上机,第3章数据的种类数据类型,计算机如何识数数制 整型 字符型 浮点型 类型转换 综合应用类型转换 跟我上机,第3章数据的种类数据类型,计算机如何识数数制 整型 字符型 浮点型 类型转换 综合应用类型转换 跟我上机,第3章数据的种类数据类型,计算机如何识数数制 整型 字符型 浮点型 类型转换 综合应用类型转换 跟我上机,第3章数据的种类数据类型,计算机如何识数数制 整型 字符型 浮点型 类型转换 综合应用类型转换 跟我上机,第3章数据的种类数据类型,计算机如何识数数制 整型 字符型 浮点型 类
2、型转换 综合应用类型转换 跟我上机,第3章数据的种类数据类型,计算机如何识数数制 整型 字符型 浮点型 类型转换 综合应用类型转换 跟我上机,第3章数据的种类数据类型,计算机如何识数数制 整型 字符型 浮点型 类型转换 综合应用类型转换 跟我上机,3.1 计算机如何识数数制,3.1.1 二进制 3.1.2 八进制 3.1.3 十六进制 3.1.4 数制间的转换,3.1 计算机如何识数数制,数据在计算机里是以二进制形式的数表示的,在实际程序中,许多系统程序需要直接对二进制位的数据操作,还有不少硬件设备与计算机通信都是通过一组二进制数控制和反映硬件的状态。在表示一个数时,二进制形式位数多,八进制和
3、十六进制比二进制书写方便些,他们都是计算机中计算常用的数制。,3.1.1 二进制,二进制是逢二进一的数制,目前的计算机全部都是采用二进制系统。0和1是二进制数字符号,运算规则简单,操作方便,因为每一位数都可以用任何具有两个稳定状态的元件表示,所以二进制易于用电子方式实现。,3.1.1 二进制,1. 二进制运算规则 加法:000,011,101,1110 减法:000,101,110,1011 乘法:000,010,100,111 除法:010,111 例如,((1100))2 + ((0111))2计算如下: 1100 + 0111 10011,3.1.1 二进制,2. 二进制转换为十进制 十
4、进制是逢十进一,由数字符号0,1,2,3,4,5,6,7,8,9组成,可以这样分析十进制数: (1234)10 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100 = 1000 + 200 +30 + 4 =(1234)10 采用同样的方式转换二进制到十进制。 (1101)2 = 1 * 23 + 1 * 22 + 0 * 21 + 1 * 20 = 8 + 4 + 0 + 1 = (13)10 (10.01)2 = 1 * 21 + 0 * 20 + 0 * 2-1 + 1 * 2-2 = 2 + 0 + 0 + 0.25 = (2.25)10,3.1.1 二进制
5、,3. 十进制转换二进制 十进制整数转换为二进制:方法是除以2取余,逆序排列,以(89)10为例,如下。 89 2 余1 44 2 余0 22 2 余0 11 2 余1 5 2 余1 2 2 余0 1余1 (89)10 = (1011001)2 (5)10 = (101)2 (2)10 = (10)2,3.1.1 二进制, 十进制小数的转换为二进制:方法是乘以2取整,顺序排列,以(0.625)10为例,如下。 0.625 * 2 = 1.25取整1 0.25 * 2 = 0.5取整0 0.5 * 2 = 1取整1 (0.625)10 = (0.101)2 (0.25)10 = (0.01)2
6、(0.5)10 = (0.1)2,3.1.2 八进制,八进制是逢八进一的数制,采用07八个数字组成。八进制比二进制书写方便,也常用于计算机计算。需要注意的是,C语言中,八进制数以数字0开头,比如04,017等等。 1. 八进制转换为十进制 和二进制转换为十进制的原理相同,如:(64)8 = 6 * 81 + 4 * 80 = 48 + 4 =(52)10 2. 二进制转换为八进制 整数部份从最低有效位开始,以3位二进制数一组,最高有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换结果就是八进制的整数。小数部份从最高有效位开始,以3位一组,最低有效位不足3位时以0补齐,每一组均可转换
7、成一个八进制的值,转换结果就是八进制的小数。例如:(11001111.01111)2 = (011 001 111.011 110)2 = (317.36)8,3.1.3 十六进制,十六进制就是逢十六进一的数制,采用09和AF十六个数字组成(A代表10,F代表15),也常用于计算机计算。C语言中,十六进制数以数字0 x开头,比如0 x1A,0 xFF等。 1. 十六进制转换为十进制 和二进制转换为十进制的原理相同,如: (2FA)16 = 2 * 162 + F * 161 + A * 160= 512 + 240 + 10 =(762)10 2. 二进制转换为十六进制 与二进制转换为八进制相
8、似,只是转换为十六进制时,以4位二进制数为一组,每一组转换为一个十六进制的值。例如: (11001111.01111)2 = (1100 1111.0111 1000)2 = (CF.78)16,3.1.4 数制间的转换,前面已经接触过标准输出函数printf()了,这里就使用printf()函数输出转换的结果。printf()函数的格式控制参数如下表所示。,3.1.4 数制间的转换,【范例3-1】 分别使用十进制、八进制和十六进制输出已知数值。 01 #include 02 int main(void) 03 04 unsigned int x=12; 05 unsigned int y=0
9、12;/*八进制0开头*/ 06 unsigned int z=0 x12;/*十六进制0 x开头*/ 07 printf(十进制%u转化为 八进制%o 十六进制%xn,x,x,x);/*%u表示无符号十进制数*/ 08 printf(八进制%o转化为 十进制%u 十六进制%xn,y,y,y);/*%o表示无符号八进制数*/ 09 printf(十六进制%x转化为 八进制%o 十进制%un,z,z,z);/*%x表示无符号十六进制数*/ 10 return 0; 11 ,3.2 整型,整型数据,英文单词是Integer,比如0,-12,255,1,32767等等这些都是整型数据。整型数据中是不
10、允许出现小数点和其它特殊符号的。 整型数据共分为七类,分别是字符型、短整型、整型、长整型、无符号短整型、无符号整型和无符号长整型。其中短整型、整型和长整型是有符号数据类型。,3.2 整型,3.2 整型,1. 取值范围,3.2 整型,2. 有符号数和无符号数 对于有符号数,以最高位(左边第一位)作为符号位,最高位是0表示的数据是正数,最高位是1表示的数据是负数。,3.2 整型,对于无符号整数,因为表述的都是非负数,一个字节中的8位全部用来存储数据,不再设置符号位。,3.2 整型,3. 类型间转换 不同类型的整型数据所占的字节数不同,他们在相互转换时需要格外留心,不要把过大的数据放在过小的数据类型
11、中,在把占字节较大的数据赋值给占字节较小的数据时,防止出现以下的情况。 例如 int a = 2147483648; printf(%d,a); 这样赋值后,输出变量a的值并非预期的2147483648,而是-2147483648,原因是2147483648超出了int类型能够装载最大值,数据产生了溢出。如果换一种输出格式控制符,代码如下所示: printf(%u,a); 输出的结果就是变量a的值,原因是%u是按照无符号整型输出的数据,而无符号整型的数据范围上限大于2147483648这个值。,3.2 整型,unsigned short a = 256; char b = a; printf(
12、%d,b); 这样赋值后,输出变量b的值并非预期的256,而是0,原因是256超出了char类型能够装载最大值,b只截取了a的低8位的数据,如下:,变量a,变量b,3.2 整型,当把占字节较小的数据赋值给占字节较大的数据时,可能出现以下两种情况。 第1种情况,当字节较大数是无符号数时,转换时新扩充的位被填充成0 char b = 10; unsigned short a = b; printf(%u,a); 这样赋值后,变量a中输出的值是10,原因如下:,变量b,变量a,3.2 整型,第2种情况,当字节较大数是有符号数时,转换时新扩充的位被填充成符号位 char b = 255; short
13、a = b; printf(%d,a); 这样赋值后,变量a输出的值是-1,变量a扩充的高8位,根据变量b的最高位1都被填充成了1,所以数值由正数变成了负数,因为变量a的最高位符号位是1,至于为什么16个1表示的是-1,涉及到二进制数的原码和补码问题,这里先不深究。转换图示如下:,变量b,变量a,3.3 字符型,字符型是整型数据中的一种,它存储的是单个的字符,存储方式是按照ASCII码(American Standard Code for Information Interchange,美国信息交换标准码)的编码方式,每个字符占一个字节,8位(ASCII码可查阅王牌2中的相关内容)。 使用单引
14、号“”把字符引起来,用以和变量、其他数据类型区别。比如:A,5,m,$,;等等。,3.3 字符型,比如有这样5个字符:H、e、l、l、o,他们在内存中存储的形式如下的图表所示。,3.3 字符型,字符型的输出,既可以使用字符的形式输出字符,即采用“%c”格式控制符,还可以使用上小一节采用的其他整数输出方式。比如: char c = A; printf(“%c,%u”,c,c); 输出结果是:A,65 此处65是字符A的ASCII码。,3.3 字符型,【范例3-2】 字符和整数的相互转换输出 01 #include 02 int main(void) 03 04 char c=a; /*字符变量c
15、初始化*/ 05 unsigned i=97; /*无符号变量i初始化*/ 06 printf(%c,%un,c,c); /*以字符和整形输出c*/ 07 printf(%c,%un,i,i); /*以字符和整形输出c*/ 08 return 0; 09 ,3.3 字符型,字符的家族中,控制符是无法通过正常的字符形式表示,比如常用的回车、换行、退格等等,需要使用特殊的字符形式来表示他们,这种特殊字符称为转义符。,3.3 字符型,3.3 字符型,【范例3-3】 输出字符串,分析转义符的作用。 01 #include 02 int main(void) 03 04 printf(123456789
16、01234567890n); /*参考数据*/ 05 printf(abctdefn); /*转移符使用*/ 06 printf(abctdebfn); 07 printf(abctdebrfn); 08 printf(abcdefghi?n); 09 printf(整数98n); /*转移符数制*/ 10 printf(八进制表达整数98是 142n); 11 printf(十六进制表达整数98是x62n); 12 return 0; 13 ,3.4 浮点型,C语言中除了整型外,另外一种数据类型就是浮点型,浮点型可以表示有小数部分的数据。浮点型包含三种数据类型,分别是单精度的float类型,
17、双精度的double类型,和长双精度long double类型。,3.4 浮点型,3.4 浮点型,参与运算的表达式中存在double类型,或者说,参与运算的表达式不是完全由整型组成的,在没有明确的类型转换标识的情况下(将在下一小节中讲解),表达式的数据类型就是double类型。例如: 1 + 1.5 + 1.23456789/*表达式运算结果是double类型*/ 1 + 1.5/*表达式运算结果是double类型*/ 1 + 2.0/*表达式运算结果是double类型*/ 1 + 2/*表达式运算结果是int类型*/ 例子当的1.5,编译器默认它为双精度的double类型,精度高占据存储空间
18、大,如果只希望以单精度float类型运行,可以在常量后添加字符f或者F都可以,比如1.5F,2.38F。同样的,如果希望数据是以精度更高的long double参与运算,可以在常量后添加字符l或者L都可以,比如1.51245L,2.38000L。建议使用大写L,因为小写l容易和数字1混淆。,3.4 浮点型,再举几个运算的表达式的例子,如下所示: int i,j; float m; double x; i + j/*表达式运算结果是int类型*/ i + m /*表达式运算结果是float类型*/ i + m +x /*表达式运算结果是double类型*/,3.4 浮点型,指数形式如下所示(e或
19、者E都可以) 2.0e3表示2000.0 1.23e-2表示0.0123 .123e2表示12.3 1e-3表示0.001 对于指数形式,有以下两点要求: 字母e前面必须要有数字 字母e的后面必须是整数,3.5 类型转换,3.5.1 隐式转换 3.5.2 显式转换,3.5 类型转换,计算过程中,如果遇到不同的数据类型参与运算该怎么办,是终止程序还是转换类型后继续运算。编译器采取第二种方式,如果能够转换成功,程序继续运算,如果转换失败,程序报错同时终止运行。数据类型有两种转换方式,分别隐式转换和显式转换。,3.5.1 隐式转换,C语言中设定了不同数据参与运算时的转换规则,编译器会在悄无声息中进行
20、数据类型的转换,进而计算出最终结果,这就是隐式转换。,3.5.1 隐式转换,int i; i = 2 + A; 先计算“=”号右边的表达式,字符型和整型混合运算,按照数据类型转换先后顺序,把字符型转换为int类型65,然后求和得67,最后把67赋值给变量i。 double d; d = 2 + A + 1.5F; 先计算“=”号右边的表达式,字符型、整型和单精度float类型混合运算,因为有浮点型参与运算,“=”右边表达式的结果一定是double类型,按照数据类型转换顺序,把字符型转换为类型65.0,2转换为2.0,1.5F转换为1.5,最后把双精度浮点数68.5赋值给变量d。,3.5.1 隐
21、式转换,上述情况都是有低精度类型向高精度类型的转换,如果逆向转换,可能会出现丢失数据的危险,编译器会以警告的形式给出提示。例如: int i; i = 1.2; 浮点数1.2舍弃小数位后,把整数部分1赋值给变量i。如果i=1.9,运算后变量i的值依然是1,而不是2。 注 意:把浮点数转换为整数,直接舍弃小数位。,3.5.1 隐式转换,【范例3-4】 整型和浮点型数据类型间的隐式类型转换。 01 #include 02 int main(void) 03 04 int i; 05 i=1+2.0*3+1.234+c-A; /*混合运算*/ 06 printf(%dn,i); /*输出i*/ 07
22、 return 0; 08 ,3.5.2 显式转换,隐式类型转换编译器是会产生警告的,提示程序存在潜在的隐患。如果非常明确的希望转换数据类型,这就需要用到显式类型转换了。 显式转换格式如下所示: (类型名称) 变量或者常量 或者 (类型名称) (表达式),3.5.2 显式转换,例如,需要把一浮点数,以整数的形式使用printf()函数输出,怎么办?就可以调用显示类型转换。 float f=1.23; printf(%dn,(int)f); 可以得到输出结果1,没有因为调用的printf()函数格式控制列表和输出列表前后类型不统一导致程序报错。 继续分析上例,显示类型转换只是把f小数位直接舍弃,输出了整数部分,变量f的值和数据类型都没有改变,依然是float类型1.23,可以再次输出结果进行查看。 printf(%fn, f); 输出结果是:1.230000,3.5.2 显式转换,再看下面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年部编版新教材语文小学三年级上册第三单元复习课教案
- 海安中学高二数学试卷
- 湖南文科数学试卷
- 建邺一模数学试卷
- 《网络综合布线》教案 项目2任务2 综合布线的设计原则
- 健康管理中心相关课件
- 上海市第四中学2025年高一物理第二学期期末经典模拟试题含解析
- 2025年中国风电塔架行业市场发展监测及投资战略咨询报告
- 中国加氢石油树脂行业市场调查报告
- 中国双乙烯酮行业市场调查报告
- 聘请合唱团老师合同协议
- 2024年贵州省凯里市事业单位公开招聘医疗卫生岗笔试题带答案
- 河南豫信电科所属公司招聘笔试题库2025
- 农商行催收培训
- 脑卒中规范化培训脑出血课件
- 蜘蛛车专项施工方案
- 2025年推拿按摩临床主治医师职业技能资格知识考试题与答案
- 2025-2030全球及中国会议、奖励、会议和展览(MICE)行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2025年炉外精炼工职业技能考试题库及答案(完整版)
- 交通运输行业夏季安全措施
- 投资项目可行性研究指南(试用版)2002
评论
0/150
提交评论