c - *((int*)&f) 在 C 中做了什么?
问题描述
我通过这个答案找到了一种在 c 中将浮点数转换为二进制的方法:Convert float to binary in C,但我不确定答案中使用的代码*((int*)&f)
实际上是如何转换数字的。它究竟是做什么的?
解决方案
它调用未定义的行为,这意味着如果您的程序可访问,则它是无效的。
有人打算让它做的是将 a 的位重新解释float
为int
,假设int
是 32 位,并且可能也是float
IEEE 单一的。
有两种正确的方法可以做到这一点(int
替换uint32_t
为删除第一个无用的假设):
(union { float f; uint32_t i; }){f}.i
uint32_t i; memcpy(&i,&f,sizeof i);
推荐阅读
- ssl - 尝试使用 2 路 SSL 建立 Kafka 但出现错误
- android - 自定义通知 RemoteView 在向左或向右滑动时关闭
- java - JAVA:当日志文件要翻转时在应用程序中暂停
- amazon-web-services - Redshift 工作负载管理规则含义
- sharepoint - 我在哪里可以获得共享点页面的源代码?
- angular2-routing - 这个路由代码有什么问题 - Angular 8
- c - 为 64 个元素排序网络交换
- laravel - 如何将 Vue 添加到现有的 Laravel 项目中?
- android - SMS检索器api android在vivo v15 pro,redmi note 4中不起作用
- java - 无法在休息控制器中重定向响应