为中华民族崛起而奋斗 发表于 2021-4-2 19:12:28

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

有一段数据是int型,
int *data;
data=(int *)malloc(sizeof(int)*(2^23));

怎么转成float型效率较高?

小台州砂轮高秀英 发表于 2021-4-7 05:43:01

分配一个int类型的动态内存
和float有什么关系啊

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

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

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

寒风池 发表于 2021-4-12 11:41:18

float表示的范围应该是大于int,所以直接赋值就好了。

骚气十足的胖虎 发表于 2021-4-16 23:02:18

需要重新拷贝一遍吧

没马的骑士 发表于 2021-4-22 08:17:48

你没办法用memcpy啊, 两者之间的内存结构差异太大
只有同种类型的,你用memcpy取代赋值是可行的, int 1和float 1都是32位,但是内存结构上完全不同的, 不能用内存拷贝替代

如果只是char,short,int, long这些可以用memcpy
但是他们和float,double这种之间就没有办法了
赋值不是简单的memcpy,还包含了格式转换这一步

流泪的麻雀 发表于 2021-4-25 13:24:08

必须用普通循环逐个进行转换并赋值,复杂度为 O(kn)。
在实践中,如果你的平台支持 SIMD,则可以通过手动/编译器优化代码来减小常数 k。
页: [1]
查看完整版本: c/c++里,一段int类型怎么转成float?