回 帖 发 新 帖 刷新版面

主题:浮点数的位码

浮点数的位码 
Time Limit:1000MS  Memory Limit:32768K


Description:
长双精度型是C++语言内部表达能力最强的数据类型。研究其内部的位码也是饶有兴趣的。针对每个长双精度数,输出其位码。

Input:
输入数据中含有一些浮点数n(-3.4×10^4932<n<1.1×10^4932)。 
Output:
对于每个n,列出其位码,每个位码8位一组,中间用逗号隔开,每5组成一行,每个位码列成两行,位码之间空出一行,见样本输出。 
Sample Input:
15.6756
12345.67891023456
Sample Output:
01000000,00000010,11111010,11001111,01000001
11110010,00010010,11010111,01110011,00011001

01000000,00001100,11000000,11100110,10110111
00110100,00111110,10011001,01101011,01101000

代码:
#include<iostream>
using namespace std;
int main()
{
int m=0;
for(double n;cin>>n;)
{
char*p=(char*)&n;
for(int i=0;i<10;++i)
{
for(int j=7;j>=0;--j)
cout<<((*(p+i)>>j)&1);
cout<<(i%5==4?"\n":",");
}
}
}
结果出错 !!!!!!!

回复列表 (共3个回复)

沙发

“结果出错”是啥意思?把错误信息贴出来看看。
难道,你其实想表达的是“结果和Sample Output不符”?

另外,对“长双精度型”,我猜是 long double,而不是 double。
看CPP2003的描述:the type long double provides at least as much precision as
double.
其中可没说long double一定比double精度高,比如在VC中,long double就和double一样只占8字节,这也是符合C++标准的。

板凳

用union吧!~用这个东东应该会很方便的!~!~

3 楼

楼主,我猜您忽略了大小尾端:高低位存放顺序不同。
您的代码如果在big-endian看上去应该没问题,而 littler-endian就是错的。另,就是2楼说的那样,long double和double不一样,long double一般有64位,80位,96位,128位。

我来回复

您尚未登录,请登录后再回复。点此登录或注册