.C语言实型数据的编码和存储
C 语言实型数据的编码和存储
周恒忠
(皖西学院计算机科学与技术系,安徽 六安 237012 )
摘 要: C 语言数据类型丰富,而数据类型的确定在程序设计
中又至关重要,有必要对各种类型的数据进行深入细致的研究。在
Turbo C 2.0 中,实型数据包括float 型、double 型和long double 型三
种,编码长度分别为4B 、8B 和10B,从左至右,第一位为数据的符
号位,接下来为指数的偏码,位数分别为8b、11b 和15b,剩余部分
为尾数的编码。存储时以字节为单位将编码逆序存放。通过转换公式
可以轻松地实现数值与编码之间的转换,在实验的基础上归纳出了实
型数据的相关属性。
关键词:C 语言;实型;编码;存储。
1 引 言
数据类型是程序设计语言的重要概念,在各种 C 语言的相关资
料中,对于实型数据的介绍不如字符型数据和整型数据详细,且说法
[3][4]
不一,甚至存在错误,特别是其编码和存储。笔者经过实验 和研
究,归纳出在Turbo C 2.0 环境中float 型、double 型和long double 型
三种实型数据的编码方式和存储形式,供 C 语言教学和程序设计时
参考。
2 实型数据的编码
2.1 float 型数据编码
float 型数据码长四个字节32 位,四个字节分别记为B1 ,B2 ,
B3 和B4 ,32 个位分别记为b ,b ,…,b 。其中,b 为符号位,0
1 2 32 1
表示正数,1 表示负数。b2 至b9 为指数的偏码,偏值为 127。b10~b32
为尾数编码,分别表示2-1,2-2 ,…,2-23 各位上的数码。float 型数据
的编码方式如下图所示。
符号位
B1 B2 B3 B4
指数(8 位偏码) 尾数(23 位)
[1] [2]
float 型数与编码的关系由如下公式 表示
f=±(1+a) •2p 2-1
其中:f 为一个单精度实型数,一般以十进制表示,符号由首位b1 确
定,p 为指数,其值为 8 位无符号数与偏值 127 的差。a 为尾数,
a=a 2-1+a 2-2+ …+a 2-23 ,其中,a =0 或1 (i=1 ,2 ,…,23 )。利用公
1 2 23 i
式2-1 可以实现数值与编码的转换。
公式2-1 的几种例外情况:
1、指数编码全部是1,而尾数编码全部为0 时,表示±∞;
2 、指数编码全部是 1,而尾数编码不全为 0 时,表示一个无效
数字;
3、指数编码全部是0,而尾数编码不全为0 时,f=±a •2p+1 ;
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 位二进制码,即为指数的编码。
再由a 的值确定尾数编码。由于a= a 2-1+…+a 2-23 ,其中 1>a ≥0 。