You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中为何将float指针强转为int指针后输出超大数值?

为什么第二条cout语句输出超大数字?

先看你的代码:

float f = 5.0;
int i = f;
cout << i << endl;
cout << *((int*)&f) << endl;

程序输出:

5
1084227584

两种转换的本质区别:

  • 第一条int i = f;是数值转换:编译器会自动把float类型的5.0转换成int类型的5,这是符合C++类型规则的合法转换,所以输出5。
  • 第二条*((int*)&f)是内存二进制的强制解析:
    1. 先通过&f拿到float变量f的内存地址,再用(int*)强制把这个地址转换成int类型的指针——这相当于“骗”编译器,让它认为这块内存里存的是int,而非float。
    2. float类型的数值遵循IEEE 754单精度浮点数标准存储,5.0对应的32位二进制是01000000101000000000000000000000。
    3. 当把这串二进制当成int读取时,计算出的十进制值就是1084227584,因此cout输出这个大数字。

注意:这种强制类型转换属于未定义行为范畴,不同编译器、平台可能有不同结果,实际开发中不要这么写。

内容的提问来源于stack exchange,提问作者thedrooster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:25:58