帮忙解释下这个C++程序!!!!!!

来源:百度知道 编辑:UC知道 时间:2024/05/29 05:55:46
疑问在程序中,
#include<iostream>
using namespace std;
void process()
{
long double f=12345.67891023456;
long int *p=reinterpret_cast<long int *>(&f);//reinterpret_cast
//转换后的效果????
for(int i=79;i>=0;i--)//为什么是79???
{
cout<<(*p>>i&1);//此位运算的细节???
}
cout<<endl;
}
int main(int argc, char* argv[])
{
process();
printf("Hello World!\n");
return 0;
}

#include<iostream>
using namespace std;
void process()
{
long double f=12345.67891023456;
long int *p=reinterpret_cast<long int *>(&f);//reinterpret_cast将f内存空间地址转换后付给p

for(int i=79;i>=0;i--)//因为long double占10个字节,因此是10*8=80位,即0-79
{
cout<<(*p>>i&1);//例如先右移79位,即最高位(第一位)移到了最低位,这时候和1做与运算就可以得到第1位的二进制值,同理,通过循环就可以依次将各位二进制值输出
}
cout<<endl;
}
int main(int argc, char* argv[])
{
process();
printf("Hello World!\n");
return 0;
}