C语言学习一之整型与浮点型

上传人:y****n 文档编号:102574028 上传时间:2022-06-07 格式:DOCX 页数:15 大小:84.22KB
收藏 版权申诉 举报 下载
C语言学习一之整型与浮点型_第1页
第1页 / 共15页
C语言学习一之整型与浮点型_第2页
第2页 / 共15页
C语言学习一之整型与浮点型_第3页
第3页 / 共15页
资源描述:

《C语言学习一之整型与浮点型》由会员分享,可在线阅读,更多相关《C语言学习一之整型与浮点型(15页珍藏版)》请在装配图网上搜索。

1、C语言学习第一章:整型与浮点型之前一直开发单片机方面的项目时带着学着点C语言方面的知识,一直没有系统的学习C,所以写的程序现在自己都不忍心在回头看,因此打算静下心来完整的学下C,只有打好了基础才能写出精辟的程序。好的,废话进入主题。今天主要讲的是C中的两种数据类型整型和浮点型,看到这,你肯定一拍大腿说,切,这么简单的东西有什么好讲的,如果你真的拍了退,那么说明你是C菜鸟,拍的声音越大,就越菜。一:整型1.1首先我们先来将整型int。不同的系统中对于整型的大小定义是不一样的,有些是两个字节有些是四个字节,那么我们该怎么来得知其大小呢?对,你肯定也想到了用运算符“sizeof”。程序如下:#inc

2、lude /* 函数名:main 输入参数:无 输出参数:无 调用:printf() 被调用:无 功能:查看整型的大小*/void main(void) printf(the size of int is:%ubytesn,sizeof(int);运行上面的程序得到如下结果:也就是说我的这个系统中,int被规定成四个字节。需要注意的是,整型常量必须是整数,而如果含了小数点或是指数,那么将被认定我浮点型。例如:1,-12是整型,而1.0,1.2E2则是浮点型,尽管我们看来1.0也是整数,但计算机是不这么认为的。1.2下面我们来说说如何使用”pfintf()”来打印出int型数据,我们结合具体的程

3、序来讲。#include /* 函数名:main 输入参数:无 输出参数:无 调用:printf() 被调用:无 功能:正确打印int型数据*/void main(void) /1 int i_a = 12; /2 int i_b = -32; /3 printf(%d %d %d %dn,i_a,i_b,i_a+i_b,34);/4在第四行中,我们分别答应出了四个int型数据,如下所示:也就是说,”pfintf()”可以打印出整型变量、整型常量、整型表达式。%d被称为格式说明符,一个格式说明符对应一个需要打印的值。n是转义字符,表示换行,具体的会在下面讲到。1.3 int型数据可以用十进制表

4、示,那当然也可以用八进制和十六进制来表示了。在整数前面加上“0(零)”则表示八进制,加上“0x”表示十六进制。例如16的三种表示方法:16(十进制)、020(八进制)、0x10(八进制)。十进制整数对应的格式符是%d, 八进制和十六进制对应的格式符分别是%o和%x.所以打印八进制和十六进制时应写为printf(%d %o %xn,16, 020, 0x10)下面以具体的一段程序来看:#include /* 函数名:main 输入参数:无 输出参数:无 调用:printf() 被调用:无 功能:打印出八进制和十六进制的整数*/void main(void) printf(16 print in

5、十进制=%dn,16); printf(16 print in 八进制=%on,16); printf(16 print in 十六进制=%xn,16);程序的运行结果如下:如果你想八进制和十六进制的数分别显示成020、0x10.那么应该将程序改成如下:printf(16 print in 八进制=%#on,16); printf(16 print in 十六进制=%#xn,16);运行的结果如下:这样看书上去更加的一目了然。1.4 int是最基本的整型,在其基础上有衍生出了“short int(简称short)”、“long int(简称long)”、“unsinged int(简称unsi

6、nged)”、“unsinged short int(简称unsinged short)”、“unsinged long int(简称unsinged long)”.C规定,short型数据所占内存的大小不大于int型数据,而long型数据所占内存的大小不小于int型数据,也就是说,在一个系统中int型数据所占内存的大小可能与short型数据所占内存的大小一样,也可能与long型数据所占内存的大小一样。一般情况下short占两个字节,int和long占4个字节。如果我们确定程序中某个变量是非负的,而且值较大,那么我们一般用无符号型。例如无符号型的16位short取值范围是0到65535(216

7、 - 1),而short的取值范围是-32768(-215)到32767(215 - 1).对于衍生出的整型我们该如何打印呢,即他们的格式符分别是什么呢?我们还是以一段程序来看:#include /* 函数名:main 输入参数:无 输出参数:无 调用:printf() 被调用:无 功能:打印所有种类的整型数据*/void main(void) int i_a = -1; short i_b = -2; long i_c = -3; unsigned int i_ua =4; unsigned short i_ub =5; unsigned long i_uc =6; printf(%d %h

8、d %ld %u %hu %lun,i_a,i_b,i_c,i_ua,i_ub,i_uc);程序的运行结果如下图所示:相信看到这里,你已经被各种各样的格式符给搞晕了,别担心下面我们来总结下所有整形数据对应的格式符:intshortlongunsigned intunsignedshortunsignedlong十进制%d%hd%ld%u%hu%lu八进制%o%#o%ho%#ho%lo%#lo十六进制%x%#x%hx%#hx%lx%#lx1.5 最后让我们再来看看整型数据在计算机中的储存方式。整型数据是以二进制补码的形式存放在计算机中的,假设系统给int型数据分配两个字节的存储空间,那么5和-5

9、分别是怎么存放的呢。我们知道,正数的补码为其本身,所以5的二进制补码为0000 0000 0000 0101,其在计算机中的存储如下:000000000000101负数的补码求法:先写出此数决定值的二进制形式,然后每位取反,再将取反后的二进制数加1.所以-5的补码是:1111 1111 1111 1011.在计算机中的存储方式如下:1111111111111011二:字符型严格意义上将字符型(也叫char型)数据也属于整型数据的范畴,因为电脑是以ASCII码的形式来存储字符型数据的。char型数据在内存中占一个字节。2.1 char型数据声明及赋值如下:char c_broiled = a;注

10、意,char型数据赋值时一定要在字符上加单引号。下面看一段有关char型数据打印的程序:#include /* 函数名:main 输入参数:无 输出参数:无 调用:printf() 被调用:无 功能:打印char型数据*/void main(void) char c_cha = a-50; printf(%c %dn,c_cha,c_cha);其结果如下图所示:我们查ASCII码表可知,字符a对应的ASCII码为97,那么char c_cha = a-50相当于给c_cha赋值47.而ASCII码表中47的字符就是.也就是说,如果以%c的格式打印的话则打印出字符,而以%d格式打印的话则打印出该

11、字符所对应的ASCII码。同时我们还应该得出,“a-50”相当于“97 -50”,即字符与数值的运算,是用字符对应的ASCII码与数值相运算的。2.2 翻看ASCII码表可以看到,有些字符是非打印字符。例如ASCII=7代表的是扬声器。那么我们怎么用pfrintf()来描述这些字符的动作呢?下面介绍三种方法。方法一:使用ASCII码。下面的程序实现扬声器响的动作。#include /* 函数名:main 输入参数:无 输出参数:无 调用:printf() 被调用:无 功能:实现扬声器响*/void main(void) char c_beep = 7; printf(%cn,c_beep);程

12、序运行的结果是会听到扬声器发出滴的一声。方法二:使用转义字符。在前面一节里有提过一个转义字符n,它表示的是换行。下面列出所有转义字符。序列意义ASCII码a报警7b退格8f走纸12n换行10r回车13t水平制表符9v垂直指标符11反斜杠92单引号39”双引号34?问好63注意将转义序列赋给char型变量时必须加单引号,例如:char c_cha = a;可以有两种方式来描述转义序列: printf(%c,c_cha);或printf(a);方法二:使八进制或十六进制ASCII码来表示一个字符,如下所示:char c_cha = 007;(八进制)char c_cha = x07;(十六进制)单

13、引号及反斜杠不可以丢也有两种方式来描述八进制或十六进制ASCII码表示的字符。printf(%c,c_cha);printf(007);printf(007);需要强调的是,十进制是无法像八进制或十六进制ASCII码这样来表示字符的,即47并不是代表ASCII码为47的字符。C将47看作是047,即八进制的写法可以是0oo也可以是oo(oo表示两位八进制数)。肯定有人会疑惑,既然可以用十进制的ASCII码来描述所有的字符,那么为什么还要转义序列及八进制和十六进制呢,其实这是为了书写方便及更能清晰的表达程序员表示一个字符编码的意图。例如当我们想换行时,用转义序列时可写为:printf(hello

14、n);如果没有转义序列那么我们要写成printf(hello%c,10); /换行符的ASCII码为10或printf(helloxa);或printf(12312);而且八进制和十六进制可以嵌入到双引号中:printf(helloxa);上面的程序等价于:printf(hello%c,xa);而十进制只能表示成printf(hello%c,10);三:浮点型3.1基本的浮点型为float,C规定float类型必须至少能表示6位有效数字,取值范围至少是10-37到1037。其在内存中一般占有4个字节,其中8位表示符号位及指数,其余的表示有效数字。3.2 浮点型常量的表示可以没有小数点(2E5)

15、或指数部分(1.2),但不能两者都没有;可以省略小数部分(3.E2),或整数部分(.4E6),但不能两者都没有。下面是一些有效的浮点型数据:3.14、 .2、 4e16、 .8E-5、 100.需要注意的是,系统默认情况下将浮点型常量存储为double类型。如果您想将浮点型常量当做float类型,那么只要在数值后面加上f或F。列如2.3f。3.3 打印浮点型数据。Printf()函数使用%f来打印十进制的浮点数,用%e来打印指数计数法的浮点型数据。下面我们来看段具体的程序:#include /* 函数名:main 输入参数:无 输出参数:无 调用:printf() 被调用:无 功能:打印出浮点

16、型数据*/void main(void) float f_decnum = 10.12f; float f_indnum = 1.34E1f; printf(f_decnum show in float is:%fn,f_decnum); printf(f_indnum show in index is:%en,f_indnum);程序运行的结果如下图所示:3.4 float型数据的精度为7位,如果超过了其精度,那么float型数据计算会出现误差。看下面的程序:#include /* 函数名:main 输入参数:无 输出参数:无 调用:printf() 被调用:无 功能:浮点型数据的计算*/v

17、oid main(void) float f_indnum1 = 20.e5f+1; float f_indnum2 = f_indnum1 -20.e5f; float f_indnum3 = 20.e6f+1; float f_indnum4 = f_indnum3 -20.e6f; printf(f_indnum2 show in float is:%fn,f_indnum2); printf(f_indnum4 show in float is:%fn,f_indnum4);程序运行结果如下:我们发现第一个计算是正确的,而第二个出现了错误。原因就出在精度问题上,因为float型数据的精

18、度是7位,而float f_indnum3 = 20.e6f+1中的20.e6相当于在20后面加6个零,总共八位,显然超出了7位的精度。3.5 与整形类似,float为浮点型的基本类型,在其基础上衍生出了双精度型数据(double),double的精度为10位或更高。Printf()函数也是使用%f来打印十进制的double型数值。用%e来打印指数表示的double型数值。3.6 浮点型数据在计算机中的存储方式如下:+0.31415921正负号 小数部分 指数部分计算机将浮点型数据分为指数部分和小数部分,所以123.456也会被存为0.123456E3。才疏学浅,有望指教。欢迎加入“C语言及单片机”交流群:325011683

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!