c/c++里,一段int类型怎么转成float?

csdn41 2020-01-15 10:08:03
有一段数据是int型, int *data; data=(int *)malloc(sizeof(int)*(2^23)); 怎么转成float型效率较高?
...全文
901 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
apkipa1 2020-01-20
  • 打赏
  • 举报
回复
必须用普通循环逐个进行转换并赋值,复杂度为 O(kn)。 在实践中,如果你的平台支持 SIMD,则可以通过手动/编译器优化代码来减小常数 k。
寻开心 2020-01-20
  • 打赏
  • 举报
回复
你没办法用memcpy啊, 两者之间的内存结构差异太大
只有同种类型的,你用memcpy取代赋值是可行的, int 1和float 1都是32位,但是内存结构上完全不同的, 不能用内存拷贝替代

如果只是char,short,int, long这些可以用memcpy
但是他们和float,double这种之间就没有办法了
赋值不是简单的memcpy,还包含了格式转换这一步
csdn41 2020-01-20
  • 打赏
  • 举报
回复
引用 2 楼 自信男孩的回复:
float表示的范围应该是大于int,所以直接赋值就好了。
当数据量大的时候,赋值比memcpy多2~3倍的时间
寻开心 2020-01-20
  • 打赏
  • 举报
回复
没啥好办法, 只能再开个floa他数组,挨个赋值转换后再使用
csdn41 2020-01-20
  • 打赏
  • 举报
回复
引用 1 楼 寻开心的回复:
分配一个int类型的动态内存
和float有什么关系啊

float * data = (float*) malloc(sizeof(float)*(1<<23));

2^23在c里面可不是2的23次方,而是位预算当中的异或操作。

data是4*1024*1024*8 大概32MB的内存不算大
2^23是一个表示。 我有int的数据,要转成float来调用函数来运算,接口给的float。
王桑的一天 2020-01-17
  • 打赏
  • 举报
回复
需要重新拷贝一遍吧
自信男孩 2020-01-16
  • 打赏
  • 举报
回复
float表示的范围应该是大于int,所以直接赋值就好了。
寻开心 2020-01-16
  • 打赏
  • 举报
回复
分配一个int类型的动态内存
和float有什么关系啊

float * data = (float*) malloc(sizeof(float)*(1<<23));

2^23在c里面可不是2的23次方,而是位预算当中的异或操作。

data是4*1024*1024*8 大概32MB的内存不算大

70,013

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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