关于float转int的函数实现
2017-09-03 14:46
211 查看
之前写过几次int与char类型的字符串相互转换的问题,这次就想以float转成int为题,进行函数实现。
首先先对float的存储方式,做一个简单说明:
float(浮点数):在32位的计算机中占4个字节,存储格式为1位的符号位、8位的指数位、23位的尾数位。
1位的二进制数,若为1则表示为负数,若为0则表示为正数。
8位的二进制数,表示范围为0 ~255,IEEE规定指数位减去127为真正的指数,指数范围为-126~128。
23位的二进制数,最高位(整数位)的1省略不保存。若需要取整数部分,则需要将尾数位左移到整数位,再将最高位的1补齐,左移位数由指数决定。
因为float类型不能使用"<<",">>"运算符,得到二进制位。笔者在进行上述尝试时,均以编译器自动调整数据而失败。在浏览了多篇文档后,找到一个适合本次要求的函数,内存拷贝函数 memcpy();
内存拷贝函数:可以拷贝任意数据类型,拷贝长度为指定大小。
至此,就得到了正确的float类型转为int类型的数据。
参考文献:1.float数据在内存中的存储方法 http://blog.csdn.net/yezhubenyue/article/details/7436624;
2.C函数之memcpy()函数用法 http://blog.csdn.net/tigerjibo/article/details/6841531.
首先先对float的存储方式,做一个简单说明:
float(浮点数):在32位的计算机中占4个字节,存储格式为1位的符号位、8位的指数位、23位的尾数位。
1位的二进制数,若为1则表示为负数,若为0则表示为正数。
8位的二进制数,表示范围为0 ~255,IEEE规定指数位减去127为真正的指数,指数范围为-126~128。
23位的二进制数,最高位(整数位)的1省略不保存。若需要取整数部分,则需要将尾数位左移到整数位,再将最高位的1补齐,左移位数由指数决定。
因为float类型不能使用"<<",">>"运算符,得到二进制位。笔者在进行上述尝试时,均以编译器自动调整数据而失败。在浏览了多篇文档后,找到一个适合本次要求的函数,内存拷贝函数 memcpy();
内存拷贝函数:可以拷贝任意数据类型,拷贝长度为指定大小。
float fla = -12.5; unsigned long ina; memcpy(&ina ,&fla,sizeof(float));接下来的事情,就比较容易了:
//得到并记录符号位 int GetSign(unsigned long ina) { int sign = ina & (1<<31); if(sign != 0) { return -1; } else { return 1; } }
//读出指数位 int GetExp(unsigned long ina) { int exp = 0; for(int i=23; i<31; i++) { exp |= (ina & 1<<i); } exp >>= 23; exp -= 127;//ieee 规定指数位须减去127 为真正的指数 return exp; }
注释1:
exp >>= 23;//将指数位右移最左边ina &= (1<<23)-1;//保留小数位 ina |= 1<<23;//填入小数位前的 1 ina >>= (23-exp);//整数部分右移到合适位置 ina *= sign;//符号位
注释2:
ina &= (1<<23)-1;//将尾数位的数字保留下,其余数字丢弃;至此,就得到了正确的float类型转为int类型的数据。
参考文献:1.float数据在内存中的存储方法 http://blog.csdn.net/yezhubenyue/article/details/7436624;
2.C函数之memcpy()函数用法 http://blog.csdn.net/tigerjibo/article/details/6841531.
相关文章推荐
- 关于float转int的函数实现
- 关于估价函数的实现-------基于python语言(网络爬虫)
- 关于函数strtok和strtok_r的使用要点和实现原理(一)
- 关于 short,int ,long,和float,double 理解
- C语言:实现一个函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中
- 1.写一个函数返回参数二进制中1的个数2.获取一个数二进制序列中所有的偶数为和奇数位,分别输出二进序列3.输出一个整数的每一位4.编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(b
- 如何实现int、char*、float、与CString之间的转换
- Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数
- c 实现int sqrt(int x)函数的细节讨论
- 关于APUE里面TELL_WAIT()之类函数的两种实现方式
- 如何实现int, char*, float与CString之间的转换
- 关于语音聊天(wave系列函数播放文件、网络音频)的实现方法
- 关于函数strtok和strtok_r的使用要点和实现原理(一)
- 关于int,unsigned int , short的关系与跨平台应用及char,int,float等类型在不同平台下所占字节数
- 关于驱动开发中mmap函数的实现
- 关于驱动开发中mmap函数的实现
- 关于8个基本的数据类型:byte,short,int,long,float,double,char,boonlean
- 关于int、float、double一些知识的整理
- 关于函数strtok和strtok_r的使用要点和实现原理(一)
- 如何实现int与CString,char*与CString,float与CString之间的相互转化