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)是内存二进制的强制解析:- 先通过
&f拿到float变量f的内存地址,再用(int*)强制把这个地址转换成int类型的指针——这相当于“骗”编译器,让它认为这块内存里存的是int,而非float。 - float类型的数值遵循IEEE 754单精度浮点数标准存储,
5.0对应的32位二进制是01000000101000000000000000000000。 - 当把这串二进制当成int读取时,计算出的十进制值就是1084227584,因此cout输出这个大数字。
- 先通过
注意:这种强制类型转换属于未定义行为范畴,不同编译器、平台可能有不同结果,实际开发中不要这么写。
内容的提问来源于stack exchange,提问作者thedrooster
相关产品推荐
相关产品推荐

