计算机内浮点型数据表示形式
设计c++程序,实现敲入浮点数后,显示计算机中实际存储的二进制信息。
以下是一个很简单的实现代码,
C/C++ code
-
#include
<
stdlib.h
>
#include
<
iostream
>
using
namespace
std;
int
main()
{
int
b[
32
];
long
s;
//
占4个字节,用于实现
int
i;
float
f;
cin
>>
f;
//
输入浮点数
[color
=
#FF0000]
*
((
float
*
)(
&
s))
=
f;
//
实现位模式的转换[/color]
for
(i
=
31
; i
>=
0
;
--
i)
{
b[i]
=
s
&
0x1
;
//
位与运算将s中的最低位二进制数(0或1)放置到数组b中
s
=
s
>>
1
;
//
每次取得s的最低位后将s右移移位,以便获得下一位
}
for
(i
=
0
;i
<
32
;
++
i)
cout
<<
b[i];
//
显示计算机中浮点数f实际存储的二进制信息
cout
<<
endl;
return
0
;
}
这种方法挺简单的,隐藏了许多细节,刚开始我思路比较麻烦,
我首先把输入的float型数据分为整数和小数部分转换成二进制存储在两个字符数组中,
然后根据IEEE 754标准,提取阶码、尾数的数值位,另外尾符比较好处理,这样做比较麻烦,
不过能够很清晰地了解单精度浮点型数据在计算机中的存储方式。很好!
红色部分涉及到位模式的转换问题,有点不是很懂,哪位高手能帮忙解释一下啊!
|