c/c++里,一段int类型怎么转成float?
有一段数据是int型,int *data;
data=(int *)malloc(sizeof(int)*(2^23));
怎么转成float型效率较高?
分配一个int类型的动态内存
和float有什么关系啊
float * data = (float*) malloc(sizeof(float)*(1<<23));
2^23在c里面可不是2的23次方,而是位预算当中的异或操作。
data是4*1024*1024*8 大概32MB的内存不算大 float表示的范围应该是大于int,所以直接赋值就好了。 需要重新拷贝一遍吧 你没办法用memcpy啊, 两者之间的内存结构差异太大
只有同种类型的,你用memcpy取代赋值是可行的, int 1和float 1都是32位,但是内存结构上完全不同的, 不能用内存拷贝替代
如果只是char,short,int, long这些可以用memcpy
但是他们和float,double这种之间就没有办法了
赋值不是简单的memcpy,还包含了格式转换这一步 必须用普通循环逐个进行转换并赋值,复杂度为 O(kn)。
在实践中,如果你的平台支持 SIMD,则可以通过手动/编译器优化代码来减小常数 k。
页:
[1]