主题:探究浮点格式
//《c++编程思想(第一卷)》中有一道例题
//float和double里的数字位被分为段:指数、位数和符号位,它用科学
//计数法来存储数值。下面的程序打印出不同浮点数的二进制形式。
#include <iostream>
#include <cstdlib>
using namespace std;
void printBinary(const unsigned char val){
for(int i=7;i>=0;i--)
if(val&(1<<i))
cout<<"1";
else
cout<<"0";
}
int main(int argc,char*argv[])
{
if(argc!=2){
cout<<"Must provide a number"<<endl;
exit(1);
}
double d=atof(argv[1]);
unsigned char*cp=reinterpret_cast<unsigned char*>(&d);
for(int i=sizeof(double);i>0;i-=2){//[color=FF0000]为什么是i>0而不是i>=0[/color]
printBinary(cp[i-1]);
printBinary(cp[i]);//[color=FF0000]i不越界吗?为什么不是cp[i-2]?[/color]
}
return 0;
}
//如果sizeof(double)==8,那么打印时的顺序我想应该是cp[7]cp[6]cp[5]
//cp[4]cp[3]cp[2]cp[1]cp[0],可上面打印顺序好像是cp[7]cp[8]cp[5]cp[6]
//cp[3]cp[4]cp[1]cp[2]。迷惑。。。。。。
//float和double里的数字位被分为段:指数、位数和符号位,它用科学
//计数法来存储数值。下面的程序打印出不同浮点数的二进制形式。
#include <iostream>
#include <cstdlib>
using namespace std;
void printBinary(const unsigned char val){
for(int i=7;i>=0;i--)
if(val&(1<<i))
cout<<"1";
else
cout<<"0";
}
int main(int argc,char*argv[])
{
if(argc!=2){
cout<<"Must provide a number"<<endl;
exit(1);
}
double d=atof(argv[1]);
unsigned char*cp=reinterpret_cast<unsigned char*>(&d);
for(int i=sizeof(double);i>0;i-=2){//[color=FF0000]为什么是i>0而不是i>=0[/color]
printBinary(cp[i-1]);
printBinary(cp[i]);//[color=FF0000]i不越界吗?为什么不是cp[i-2]?[/color]
}
return 0;
}
//如果sizeof(double)==8,那么打印时的顺序我想应该是cp[7]cp[6]cp[5]
//cp[4]cp[3]cp[2]cp[1]cp[0],可上面打印顺序好像是cp[7]cp[8]cp[5]cp[6]
//cp[3]cp[4]cp[1]cp[2]。迷惑。。。。。。