C语言程序设计
2007年10月第23卷第5期皖西学院学报
JournalofWestAnhuiUniversityOct.,2007Vol.23 NO.5
C语言实型数据的编码和存储
周恒忠
(皖西学院计算机科学与技术系,摘 要:C语言数据类型丰富,,究。在TurboC2.0中,float型,编码长度分别为4B、8B和10B,从左至右,第一位,,、11b和15b,剩余部分为尾数的编码。存储时以字节为单位将编码逆序存放。,在实验的基础上归纳出了实型数据的相关属性。
关键词:C语言;实型;编码;存储。
中图分类号:TP312C 文献标识码:A 文章编号:1009-9735(2007)05-0019-03
3
引 言
数据类型是程序设计语言的重要概念,在各种C
语言的相关资料中,对于实型数据的介绍不如字符型数据和整型数据详细,且说法不一,甚至存在错误,特别是其编码和存储。笔者经过实验和研究,归纳出在TurboC2.0环境中float型、double型和longdouble
型三种实型数据的编码方式和存储形式,供C语言教学和程序设计时参考。1 实型数据的编码1.1 float型数据编码
float型数据码长四个字节32位,四个字节分别
记为B1,B2,B3和B4,32个位分别记为b1,b2,…,b32。其中,b1为符号位,0表示正数,1表示负数。b2
至b9为指数的编码,值为127。b10-b32为尾数编码,分别表示2
-1
,2
-2
,…,2
-23
各位上的数码。float型数
据的编码方式如下图所示
。
公式(1)的几种例外情况:
(1)指数编码全部是1,而尾数编码全部为0时,表示±∞;
(2)指数编码全部是1,而尾数编码不全为0时,表示一个无效数字;
(3)指数编码全部是0,而尾数编码不全为0时,
p+1
f=±a 2;
(4)所有编码全部为0时,表示数0。1.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
再由a的值确定尾数编码。由于a=a12+…+a232
-23
,其中1>a≥0。采取乘2取整的方法,分别
float型数与编码的关系由如下公式
p
f=±(1+a) 2
[1-2]
表示
(1)
其中:f为一个单精度实型数,一般以十进制表示,符号由首位b1确定,p为指数,其值为8位无符号数与偏值127的差。a为尾数,a=a12
-1
求出a1,a2,…,a23的值。
例如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
3收稿日期:2007-06-28
+a22
-2
+
-23
…+a232,其中,ai=0或1(i=1,2,…,23)。利用公式(1)可以实现数值与编码的转换。
作者简介:周恒忠(1956-),男,皖西学院计算机科学与技术系副教授,研究方向:程序设计及其语言、计算机图形学和图像处理。
19