浮点数在存储器中的表示与计算

本文介绍了浮点数在存储器中的表示方式,遵循IEEE标准,分为规格化、非规格化和特殊数值三种形式。通过实例展示了如何计算和理解浮点数的二进制表示,并讨论了无穷大、NaN的运算及判断。同时,提到了字节顺序对浮点数处理的影响,以及在不同平台上的处理差异。
摘要由CSDN通过智能技术生成

 1 ,变量在内存中的存储


 

Microsues 发的微薄:

C++ 中,把负值赋给 unsigned 对象是合法的,其结果是该负数对该类型的取值个数求模后的值。例如:把 -1 赋给 8 位的 unsigned char ,因为 -1256 求模后的值为 255 ,所以结果是 255

 

我的回复:

c/c++ 中赋值很随意的,只需要做好 " 合法 " 的类型转换。本质上是数 / 对象如何在机器中表示的问题,一个内存中的数,可以是 char, int, pointer, double.... 任何类型。你的例子中 , 内存中写入了一个 0xFF 字节,而

0xFF=-1(char)=255(u char)=3.57331e-043(float)=......

 

为此我写了两行代码

这两行代码的输出是:

 

也就是说 0x000000FF 表示浮点数的 3.57331e-043 ,看起来有点不可思议,这是怎么来的呢?

 

 2 :浮点数在内存中的表示

IEEE 规定,浮点标准用

   

形式来表示一个数,其中:

S 是符号 (sign)M 是有效数 (significand) ,指数2 的 E 次幂,注意是2 不是 10

 

浮点数的位分成三个区域表示这些值:

1)s=1 个符号位 s ,直接编码 S

2) k 位的指数编码 E

3) n 位小数编码 M

 

C 语言中, float 类型对应 s=1, k = 8, n=23 ,表示 32 位的浮点数, double 类型对应 s=1,k=11,n=5264 位浮点数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值