c语言实型存储方式,.C语言实型数据的编码和存储.pdf

.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 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【问题描述】 合法的实数书写格式分一般格式和科学格式两种。分别描述如下: 一般格式为常见的书写格式,分为整数部分和小数部分两部分,中间分用小数点.分隔。整数部分最开始可能含有正号或负号,之后为不含前导零的数字串;小数部分是由0-9十种字符组成的任意长的字符串。当小数部分为0时,小数部分和小数点可以省略。 科学格式由系数部分和指数部分两部分组成,中间用英文字母E分隔。系数部分为实数书写的一般格式;指数部分为可带有正负号数字串。 例如,+2、-1.56为一般格式的实数,而6.2E-2、-9E8为科学格式的实数。 只有小数点而没有小数部分的书写格式为不合法,例如,23.,23.E16均为不合法的实数书写格式。 编程分析哪些数的书写是正确的,是用哪种方式书写的。 【输入形式】 输入文件为当前目录下的real.in。该文件包含一个字符串(长度不超过20个字符),以回车符结束,表示一个数据(无多余空格)。 【输出形式】 输出文件为当前目录下的real.out。该文件有一行。如果输入数据的书写是非法的,输出Wrong;如果输入数据是用一般格式书写的,输出“Format1”;如果该数据是用科学格式书写的,输出“Format2”。输出的末尾均要以一个回车符作为结束。 【输入样例1】 +1.23 【输出样例1】 Format1 【输入样例2】 -5.1.1 【输出样例2】 Wrong 【输入样例3】 -5.1E-2 【输出样例3】 Format2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值