欢迎来到天天文库
浏览记录
ID:37695413
大小:309.45 KB
页数:8页
时间:2019-05-29
《C语言实型数据的编码和存储》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C语言实型数据的编码和存储周恒忠(皖西学院计算机科学与技术系,安徽六安237012)摘要:C语言数据类型丰富,而数据类型的确定在程序设计中又至关重要,有必要对各种类型的数据进行深入细致的研究。在TurboC2.0中,实型数据包括float型、double型和longdouble型三种,编码长度分别为4B、8B和10B,从左至右,第一位为数据的符号位,接下来为指数的偏码,位数分别为8b、11b和15b,剩余部分为尾数的编码。存储时以字节为单位将编码逆序存放。通过转换公式可以轻松地实现数值与编码之间的转换,在实验的基础上归纳出了实型数据的相关属性。关键词:C语言;实型;编码;存
2、储。1引言数据类型是程序设计语言的重要概念,在各种C语言的相关资料中,对于实型数据的介绍不如字符型数据和整型数据详细,且说法[3][4]不一,甚至存在错误,特别是其编码和存储。笔者经过实验和研究,归纳出在TurboC2.0环境中float型、double型和longdouble型三种实型数据的编码方式和存储形式,供C语言教学和程序设计时参考。2实型数据的编码2.1float型数据编码float型数据码长四个字节32位,四个字节分别记为B1,B2,B3和B4,32个位分别记为b1,b2,…,b32。其中,b1为符号位,0表示正数,1表示负数。b2至b9为指数的偏码,偏值为12
3、7。b10~b32-1-2-23为尾数编码,分别表示2,2,…,2各位上的数码。float型数据的编码方式如下图所示。符号位B1B2B3B4指数(8位偏码)尾数(23位)[1][2]float型数与编码的关系由如下公式表示pf=±(1+a)•22-1其中:f为一个单精度实型数,一般以十进制表示,符号由首位b1确定,p为指数,其值为8位无符号数与偏值127的差。a为尾数,-1-2-23a=a12+a22+…+a232,其中,ai=0或1(i=1,2,…,23)。利用公式2-1可以实现数值与编码的转换。公式2-1的几种例外情况:1、指数编码全部是1,而尾数编码全部为0时,表示±
4、∞;2、指数编码全部是1,而尾数编码不全为0时,表示一个无效数字;p+13、指数编码全部是0,而尾数编码不全为0时,f=±a•2;4、所有编码全部为0时,表示数0。2.1.1由数值f确定其编码先由p的值确定指数编码。当f≥2时,将f连续被2除,直到商a满足2>a≥1,p的值为除法运算的次数;当f<1时,将f连续被2乘,直到积a满足2>a≥1,p的值为负数,其绝对值为乘法运算的次数。将无符号数127+p转换为8位二进制码,即为指数的编码。-1-23再由a的值确定尾数编码。由于a=a12+…+a232,其中1>a≥0。采取乘2取整的方法,分别求出a1,a2,…,a23的值。例如
5、f=100(>2)时,将100连续被2除6次,商为1.5625,指数p=6,将133(127+6)转换成8位无符号二进制数10000101,即得到了b2至b98个位的编码。对纯小数0.5625采取乘2取整,求得a1=a4=1,a2=a3=a5=…=a23=0,由此,得到b10至b3223个位的编码。因为100>0,所以,b1=0,故实型数100的编码为:010000101100100000000000000000000再如f=1时,由于1=1.02,所以,p=0,a=0,于是ai=0(i=1,2,…,23)。所以实型数1编码为:0011111110000000000000
6、00000000002.1.2由编码求f的值先根据编码分别求出p和a的值,然后利用公式2-1计算f的值(一般用十进制表示)。设某数的编码如下:10111100110010100000000000000000根据b2至b98个位的值,求得p=121-127=-6。又因为b10、b13、-1-4-6b153个位的值为1,其余20个位的值为0,故得a=2+2+2=0.5781,由b1=1知该数为负数。所以,以上编码表示的实型数f为:-6f=-21.5781=-0.02456820312。-1-2-23由于2+2+…+2≈1,所以,按如上方式编码可表示的最大12738float型
7、数为22≈3.4028210,编码为:01111111011111111111111111111111当指数编码全为0时,p=-127,若尾数编码不全为0,则公式2-1形p+1-23-126-45如f=a•2,因此,最小正数为22=1.401310,其编码为:00000000000000000000000000000001实际应用时,指数编码全部为0的float型数作为0对待。所以,-126-38float型最小正数为2≈1.1754910。-23-7尾数最小值为:2≈1.1920910。float型数
此文档下载收益归作者所有