*(float*)&i 这个代表什么意思?

XC1008611 2012-11-28 11:51:54
//企图重新解释变量
int i;
*(float*)&i=1.0//通过非声明的类型访问


这个*(float*)&i是什么意思
...全文
2373 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
雷神风暴烈酒 2012-11-30
  • 打赏
  • 举报
回复
引用 17 楼 yisikaipu 的回复:
引用 14 楼 Neversaydie_D 的回复:int i ; *(float*)&i = 1.0; cout<<i; 请大牛解释一下 cout<<i 出现的数值的原因 因为 float 的 1.0 的编码是 3f 80 00 00,这个编码按 int 解读就是你看到的那个数
引用 23 楼 zhao4zhong1 的回复:
楼主应该給17楼分。
我这样理解对不对: float 在内存的储存是 1个符号位8个阶码位 23个尾数位 1.0 的二进制的表示 是 0000 0001 可表示为 1.0*2^0, 阶码为127+0 = 127;127的二进制是0111 1111 尾数部分是23个0; 1.0在内存中的储存是: 0011 1111 1000 0000 0000 0000 0000 0000 再换成16进制则是: 3f 80 00 00 请大牛指教 对不对
yisikaipu 2012-11-30
  • 打赏
  • 举报
回复
引用 23 楼 zhao4zhong1 的回复:
楼主应该給17楼分。
谢赵老师,我在#13楼有得分的呢
赵4老师 2012-11-30
  • 打赏
  • 举报
回复
楼主应该給17楼分。
雷神风暴烈酒 2012-11-30
  • 打赏
  • 举报
回复
引用 26 楼 yisikaipu 的回复:
引用 25 楼 Neversaydie_D 的回复:我这样理解对不对: float 在内存的储存是 1个符号位8个阶码位 23个尾数位 1.0 的二进制的表示 是 0000 0001 可表示为 1.0*2^0, 阶码为127+0 = 127;127的二进制是0111 1111 尾数部分是23个0; 1.0在内存中的储存是: 0011 1111 1000 0000……
谢谢!
yisikaipu 2012-11-30
  • 打赏
  • 举报
回复
引用 25 楼 Neversaydie_D 的回复:
我这样理解对不对: float 在内存的储存是 1个符号位8个阶码位 23个尾数位 1.0 的二进制的表示 是 0000 0001 可表示为 1.0*2^0, 阶码为127+0 = 127;127的二进制是0111 1111 尾数部分是23个0; 1.0在内存中的储存是: 0011 1111 1000 0000 0000 0000 0000 0000 再换成16进制则是: 3f 80 00 00
对的
mujiok2003 2012-11-29
  • 打赏
  • 举报
回复 4
等价于
int i;
int *pi = &i
float* temp = (float*)pi;
*temp = 1.0;
int b = i; //i被解释为一个整数,但它实际上保存的是一个浮点数
doki0314 2012-11-29
  • 打赏
  • 举报
回复
对i进行取址,得到一个(int型)指针,再把这个指针强制转换为float型指针。
XC1008611 2012-11-29
  • 打赏
  • 举报
回复
引用 10 楼 okletsgo007 的回复:
最好贴出来上下文的代码


这是我在c++创始人写的书里看到的一个错误例子
okletsgo007 2012-11-29
  • 打赏
  • 举报
回复
最好贴出来上下文的代码
okletsgo007 2012-11-29
  • 打赏
  • 举报
回复
这段代码木有错啊,是不是你的上下文有问题
XC1008611 2012-11-29
  • 打赏
  • 举报
回复
引用 3 楼 dahuaixiaohuai 的回复:
引用 1 楼 xiedonghao 的回复:对i进行取址,得到一个(int型)指针,再把这个指针强制转换为float型指针。 再取这个float指针所指的对象
一楼那段代码是错误的,你能指点一下哪里是错的吗
goog_guzl 2012-11-29
  • 打赏
  • 举报
回复
引用 3 楼 dahuaixiaohuai 的回复:
引用 1 楼 xiedonghao 的回复:对i进行取址,得到一个(int型)指针,再把这个指针强制转换为float型指针。 再取这个float指针所指的对象
++
jianglei_007 2012-11-29
  • 打赏
  • 举报
回复
&i取i的地址 得到一个指针 在强制转化为float指针 最后()外的*就是给转化后的指针指向的数赋值
doki0314 2012-11-29
  • 打赏
  • 举报
回复
引用 4 楼 XC1008611 的回复:
引用 1 楼 xiedonghao 的回复:对i进行取址,得到一个(int型)指针,再把这个指针强制转换为float型指针。 这段代码是有错误的,不知道是在哪里,你能帮我指出来吗
这段代码应该是错在初衷和实际结果不相符吧。写代码的人本来想把i当做一个float型变量来存储float,但是那样的写法,数值是存进去了,只是使用的时候如果没经过转换,它还是一个int型变量,得到的数值跟存进去的数值相差十万八千里了^_^
漫步者、 2012-11-29
  • 打赏
  • 举报
回复
就是把i的地址中的数据类型转换成float,类型,在外面去用星号,是对该地址取出转换后的值
doki0314 2012-11-29
  • 打赏
  • 举报
回复
引用 19 楼 XC1008611 的回复:
为什么1.0是double类型的常量
浮点数在后面没加f表明是单精度浮点数时都会默认是大宝
XC1008611 2012-11-29
  • 打赏
  • 举报
回复
怎么给你们分啊,是不是点个 “对我有用” 这个按钮就可以了
XC1008611 2012-11-29
  • 打赏
  • 举报
回复
引用 1 楼 xiedonghao 的回复:
对i进行取址,得到一个(int型)指针,再把这个指针强制转换为float型指针。
这段代码是有错误的,不知道是在哪里,你能帮我指出来吗
一叶之舟 2012-11-29
  • 打赏
  • 举报
回复
引用 1 楼 xiedonghao 的回复:
对i进行取址,得到一个(int型)指针,再把这个指针强制转换为float型指针。
再取这个float指针所指的对象
XC1008611 2012-11-29
  • 打赏
  • 举报
回复
引用 12 楼 zhao4zhong1 的回复:
C/C++ code?123456789101112131415//企图重新解释变量 int i; *(float*)&i=1.0;//通过非声明的类型访问1.0是double类型的常量&i //取int变量i的地址(float*)&i //将这个地址强制类型转换为指向float类型的指针*(float*)&i=1.0; //给这个指针所……
为什么1.0是double类型的常量
加载更多回复(7)

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧