求解释此句 详细点更好 int* ip = reinterpret_cast<int*>(&f); 其中这部使得输出:*ip=1107951516

//=====================================//f0312.cpp//空间实体的理解//========================... //=====================================
// f0312.cpp
// 空间实体的理解
//=====================================
#include<iostream>
using namespace std;
//-------------------------------------
int main(){
float f = 34.5;
int* ip = reinterpret_cast<int*>(&f);
cout<<"float address: "<<&f<<"=>"<<f<<endl;
cout<<" int address: "<<ip<<"=>"<<*ip<<endl;
*ip = 100;
cout<<" int: "<<*ip<<endl;
cout<<"float: "<<f<<endl;
}//====================================
展开
 我来答
adoqq_bd
2011-10-24
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
计算机的浮点数存储依照IEEE754规范,它是这样规定的:
浮点数由两部分组成:底数部分M+指数部分E: M*2E (M和E都是2进制的
32位二进制是这样划分的:
FEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM

其中F是符号位和(和整数一样)E是指数位 M是有效数字位(看起来是23位,实际上是24位,并且最高位始终为1)指数部分8位,由于指数可以为负数,所以IEEE754规则规定此处的值减去127为实际指数,并且原始小数点在看不见的最高位的1后面
34.5的二进制是这样存储的
01000010 00001010 00000000 00000000
1000010 0<--指数
10001010 00000000 00000000<--有效数字

指数部分为10000100=132,132-127=5,所以有效数字1.0001010 00000000 00000000的小数点向右移动5位就是100010.10 00000000 00000000,换算成10进制就是34.5

把01000010 00001010 00000000 00000000当作int输出就好计算多了,那就是1107951616
gouyun0922
2011-10-25
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
现在还看不懂哈!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式