版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编辑课件第3章数据的种类数据类型p 计算机如何识数数制 p 整型p 字符型 p 浮点型 p 类型转换 p 综合应用类型转换p 跟我上机 编辑课件第3章数据的种类数据类型 计算机如何识数数制 p 整型p 字符型 p 浮点型 p 类型转换 p 综合应用类型转换p 跟我上机 编辑课件第3章数据的种类数据类型 计算机如何识数数制 整型p 字符型 p 浮点型 p 类型转换 p 综合应用类型转换p 跟我上机 编辑课件第3章数据的种类数据类型 计算机如何识数数制 整型 字符型 p 浮点型 p 类型转换 p 综合应用类型转换p 跟我上机 编辑课件第3章数据的种类数据类型 计算机如何识数数制 整型 字符型 浮点
2、型 p 类型转换 p 综合应用类型转换p 跟我上机 编辑课件第3章数据的种类数据类型 计算机如何识数数制 整型 字符型 浮点型 类型转换 p 综合应用类型转换p 跟我上机 编辑课件第3章数据的种类数据类型 计算机如何识数数制 整型 字符型 浮点型 类型转换 综合应用类型转换p 跟我上机 编辑课件第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除法:
4、010,111例如,((1100))2 + ((0111))2计算如下: 1100+ 011110011编辑课件3.1.1 二进制2. 二进制转换为十进制十进制是逢十进一,由数字符号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
5、 * 21 + 0 * 20 + 0 * 2-1 + 1 * 2-2 = 2 + 0 + 0 + 0.25 = (2.25)10编辑课件3.1.1 二进制3. 十进制转换二进制 十进制整数转换为二进制:方法是除以2取余,逆序排列,以(89)10为例,如下。89 2 余144 2 余022 2 余011 2 余15 2 余12 2 余01余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取整10.25 *
6、2 = 0.5取整00.5 * 2 = 1取整1(0.625)10 = (0.101)2(0.25)10 = (0.01)2(0.5)10 = (0.1)2编辑课件3.1.2 八进制八进制是逢八进一的数制,采用07八个数字组成。八进制比二进制书写方便,也常用于计算机计算。需要注意的是,C语言中,八进制数以数字0开头,比如04,017等等。1. 八进制转换为十进制和二进制转换为十进制的原理相同,如:(64)8 = 6 * 81 + 4 * 80 = 48 + 4 =(52)102. 二进制转换为八进制整数部份从最低有效位开始,以3位二进制数一组,最高有效位不足3位时以0补齐,每一组均可转换成一个
7、八进制的值,转换结果就是八进制的整数。小数部份从最高有效位开始,以3位一组,最低有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换结果就是八进制的小数。例如:(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 +
8、 A * 160= 512 + 240 + 10 =(762)102. 二进制转换为十六进制与二进制转换为八进制相似,只是转换为十六进制时,以4位二进制数为一组,每一组转换为一个十六进制的值。例如:(11001111.01111)2 = (1100 1111.0111 1000)2 = (CF.78)16编辑课件3.1.4 数制间的转换前面已经接触过标准输出函数printf()了,这里就使用printf()函数输出转换的结果。printf()函数的格式控制参数如下表所示。格式控制参数格式控制参数描述描述%d十进制有符号整数%u十进制无符号整数%f十进制浮点数%o八进制数%x十六进制数编辑课件3
9、.1.4 数制间的转换【范例范例3-1】 分别使用十进制、八进制和十六进制输出已知数值。分别使用十进制、八进制和十六进制输出已知数值。01 #include 02 int main(void)03 04 unsigned int x=12;05 unsigned int y=012;/*八进制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表示无符号八进制数*/0
10、9 printf(十六进制%x转化为 八进制%o 十进制%un,z,z,z);/*%x表示无符号十六进制数*/10 return 0;11 编辑课件3.2 整型整型数据,英文单词是Integer,比如0,-12,255,1,32767等等这些都是整型数据。整型数据中是不允许出现小数点和其它特殊符号的。整型数据共分为七类,分别是字符型、短整型、整型、长整型、无符号短整型、无符号整型和无符号长整型。其中短整型、整型和长整型是有符号数据类型。编辑课件3.2 整型整型整型字符型字符型char短整型短整型shortint整型整型int长整型长整型longint无符号无符号短整型短整型unsignedsh
11、ort无符号无符号整型整型unsignedint无符号无符号短整型短整型unsignedlong编辑课件3.2 整型1. 取值范围类型类型说明说明字节字节范围范围整型int4-21474836482147483647短整型short (int)2-3276832767长整型long (int)4-21474836482147483647无符号整型unsigned (int)404294967295无符号短整型unsigned short (int)2065535无符号长整型unsigned long (int)404294967295字符型char10255编辑课件3.2 整型2. 有符号数和
12、无符号数对于有符号数,以最高位(左边第一位)作为符号位,最高位是0表示的数据是正数,最高位是1表示的数据是负数。 整数10二进制形式:00001010整数-10二进制形式:10001010编辑课件3.2 整型对于无符号整数,因为表述的都是非负数,一个字节中的8位全部用来存储数据,不再设置符号位。整数10二进制形式:00001010整数138二进制形式:10001010编辑课件3.2 整型3. 类型间转换不同类型的整型数据所占的字节数不同,他们在相互转换时需要格外留心,不要把过大的数据放在过小的数据类型中,在把占字节较大的数据赋值给占字节较小的数据时,防止出现以下的情况。例如int a = 21
13、47483648;printf(%d,a);这样赋值后,输出变量a的值并非预期的2147483648,而是-2147483648,原因是2147483648超出了int类型能够装载最大值,数据产生了溢出。如果换一种输出格式控制符,代码如下所示:printf(%u,a);输出的结果就是变量a的值,原因是%u是按照无符号整型输出的数据,而无符号整型的数据范围上限大于2147483648这个值。 编辑课件3.2 整型unsigned short a = 256;char b = a;printf(%d,b);这样赋值后,输出变量b的值并非预期的256,而是0,原因是256超出了char类型能够装载最
14、大值,b只截取了a的低8位的数据,如下:变量a0000000100000000变量b高8位被截掉了!00000000编辑课件3.2 整型当把占字节较小的数据赋值给占字节较大的数据时,可能出现以下两种情况。第1种情况,当字节较大数是无符号数时,转换时新扩充的位被填充成0char b = 10;unsigned short a = b;printf(%u,a);这样赋值后,变量a中输出的值是10,原因如下:变量b空的00001010变量a0000000000001010编辑课件3.2 整型第2种情况,当字节较大数是有符号数时,转换时新扩充的位被填充成符号位char b = 255;short a
15、= b;printf(%d,a);这样赋值后,变量a输出的值是-1,变量a扩充的高8位,根据变量b的最高位1都被填充成了1,所以数值由正数变成了负数,因为变量a的最高位符号位是1,至于为什么16个1表示的是-1,涉及到二进制数的原码和补码问题,这里先不深究。转换图示如下:变量b空的11111111变量a1111111111111111编辑课件3.3 字符型字符型是整型数据中的一种,它存储的是单个的字符,存储方式是按照ASCII码(American Standard Code for Information Interchange,美国信息交换标准码)的编码方式,每个字符占一个字节,8位(ASC
16、II码可查阅王牌2中的相关内容)。使用单引号“”把字符引起来,用以和变量、其他数据类型区别。比如:A,5,m,$,;等等。编辑课件3.3 字符型比如有这样5个字符:H、e、l、l、o,他们在内存中存储的形式如下的图表所示。0100100001100101011011000110110001101111Hello编辑课件3.3 字符型字符型的输出,既可以使用字符的形式输出字符,即采用“%c”格式控制符,还可以使用上小一节采用的其他整数输出方式。比如:char c = A;printf(“%c,%u”,c,c);输出结果是:A,65此处65是字符A的ASCII码。编辑课件3.3 字符型【范例3-2
17、】 字符和整数的相互转换输出01 #include 02 int main(void)03 04 char c=a; /*字符变量c初始化*/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 字符型转义符转义符说明说明ACSII码码n
18、换行,移动到下一行首00001010t水平制表键,移动到下一个制表符位置00001001b退格,向前退一格00001000r回车,移动到当前行行首00001101a报警00000111?输出问号00111111输出单引号00100111”输出双引号00100010ooo八进制方式输出字符,o表示八进制数空xhhh十六进制方式输出字符,h表示十六进制数空0空字符000000编辑课件3.3 字符型【范例范例3-3】 输出字符串,分析转义符的作用。输出字符串,分析转义符的作用。01 #include 02 int main(void)03 04 printf(12345678901234567890
19、n); /*参考数据*/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类型,双精度的double类型,和长双精度
20、long double类型。编辑课件3.4 浮点型浮点型floatdoublelong double类型类型位数位数有效数字有效数字取值范围取值范围float3267-1.4e-453.4e38double641516-4.9e-3241.8e308long double1281819编辑课件3.4 浮点型参与运算的表达式中存在double类型,或者说,参与运算的表达式不是完全由整型组成的,在没有明确的类型转换标识的情况下(将在下一小节中讲解),表达式的数据类型就是double类型。例如:1 + 1.5 + 1.23456789/*表达式运算结果是double类型*/1 + 1.5/*表达式运
21、算结果是double类型*/1 + 2.0/*表达式运算结果是double类型*/1 + 2/*表达式运算结果是int类型*/例子当的1.5,编译器默认它为双精度的double类型,精度高占据存储空间大,如果只希望以单精度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;
22、i + j/*表达式运算结果是int类型*/i + m /*表达式运算结果是float类型*/i + m +x /*表达式运算结果是double类型*/编辑课件3.4 浮点型指数形式如下所示(e或者E都可以)2.0e3表示2000.01.23e-2表示0.0123.123e2表示12.31e-3表示0.001对于指数形式,有以下两点要求: 字母e前面必须要有数字 字母e的后面必须是整数浮点型小数形式指数形式编辑课件3.5 类型转换3.5.1 隐式转换3.5.2 显式转换编辑课件3.5 类型转换计算过程中,如果遇到不同的数据类型参与运算该怎么办,是终止程序还是转换类型后继续运算。编译器采取第二种
23、方式,如果能够转换成功,程序继续运算,如果转换失败,程序报错同时终止运行。数据类型有两种转换方式,分别隐式转换和显式转换。编辑课件3.5.1 隐式转换C语言中设定了不同数据参与运算时的转换规则,编译器会在悄无声息中进行数据类型的转换,进而计算出最终结果,这就是隐式转换。 编辑课件3.5.1 隐式转换int i;i = 2 + A;先计算“=”号右边的表达式,字符型和整型混合运算,按照数据类型转换先后顺序,把字符型转换为int类型65,然后求和得67,最后把67赋值给变量i。double d;d = 2 + A + 1.5F;先计算“=”号右边的表达式,字符型、整型和单精度float类型混合运算
24、,因为有浮点型参与运算,“=”右边表达式的结果一定是double类型,按照数据类型转换顺序,把字符型转换为类型65.0,2转换为2.0,1.5F转换为1.5,最后把双精度浮点数68.5赋值给变量d。编辑课件3.5.1 隐式转换上述情况都是有低精度类型向高精度类型的转换,如果逆向转换,可能会出现丢失数据的危险,编译器会以警告的形式给出提示。例如:int i;i = 1.2;浮点数1.2舍弃小数位后,把整数部分1赋值给变量i。如果i=1.9,运算后变量i的值依然是1,而不是2。注注 意意:把浮点数转换为整数,直接舍弃小数位。编辑课件3.5.1 隐式转换【范例范例3-4】 整型和浮点型数据类型间的整
25、型和浮点型数据类型间的隐式类型转换。隐式类型转换。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 return 0;08 编辑课件3.5.2 显式转换隐式类型转换编译器是会产生警告的,提示程序存在潜在的隐患。如果非常明确的希望转换数据类型,这就需要用到显式类型转换了。显式转换格式如下所示:(类型名称) 变量或者常量或者(类型名称) (表达式)编辑课件3.5.2 显式转换例如,需要把一浮点数,以整数的形式使用printf()函数输出,怎么办?就可以调用显示类型转换。float f=1.23;printf(%dn,(int)f);可以得到输出结果1,没有因为调用的printf()函数格式控制列表和输出列表前后类型不统一导致程序报错。继续分析上例,显示类型转换只是把f小数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大型压裂船攻克低渗透油气田开发瓶颈的核心原理详解
- 2026年产业链供应链安全法律法规与合规管理手册
- 2026年262项“湾区标准”与300张“湾区认证”证书申报指南
- 2026年数据交易场所争议解决机制与处置流程
- 独山铅锌矿详查实施方案
- 急诊科患者心理护理与沟通技巧
- 2026年干细胞治疗膝骨关节炎Ⅲ期临床试验进展分析
- 2026年新能源汽车维修技能培训课程标准与实训方案
- 2026年政府工作报告“内外贸一体化”首次并提的深意与实施路径
- 专项资金与项目申报(2026年度刚需)
- 广告标识牌、宣传品、物料设计、制作方案投标文件(技术方案)
- GA/T 963-2024道路交通安全宣传教育设施设置规范
- 新课程标准下中小学道德与法治教育解读与实施策略
- JJF(京)90-2022 污染源环境参数一体化监测仪校准规范
- 改善工作绩效的措施
- 中医护理技术操作安全风险
- AEO供应链与贸易安全
- 化工风险辨识培训
- 2025年湖南省湘能农电联合招聘笔试参考题库含答案解析
- ARVR眼镜设计与制造方案
- 餐饮区域经理培训教程
评论
0/150
提交评论