关于float转int的函数实现
来源:互联网 发布:matlab中文字符串数组 编辑:程序博客网 时间:2024/06/05 06:12
之前写过几次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 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.
本文转自:http://blog.csdn.net/teemo_king/article/details/77822079
- 关于float转int的函数实现
- 关于float转int的函数实现
- 实现从float到int的强转
- 关于int,float,double与Integer、Float、Double的理解
- 实现一个bubble_sort函数,可以完成int ,float,char,string类型的排序
- 遇到 float 转 int 的有趣问题
- php float转int的坑
- 关于int型和float型相乘的问题
- Qt QString类型转换为int,float的函数
- float转int
- javascript float转int
- SQLServer int转float
- 如何实现int、char*、float、与CString之间的转换
- 如何实现int, char*, float与CString之间的转换
- 一个函数将int,float,double等类型转string
- 方便的int转float或者float转int(不舍弃二进制格式)
- 关于float /double、string类型的hash函数/hash表实现
- float转int 四舍五入问题
- mySQL之单表查询记录
- 专业,可信赖 | 易云股份亮相2017全球云计算大会.中国站
- Oracle数据库分页查询语句与优化
- distcc
- 采购单(京东2017秋招真题)
- 关于float转int的函数实现
- Laravel用post提交时需要注意的两个问题
- nginx 负载均衡的各种姿势
- lua——alien库实现lua调用C动态链接库(dll、so)
- 软件环境、硬件环境、开发工具
- Oracle中同时添加多条数据
- 浅析 Apache 工作原理
- Qt5开发学习之网络与通信(十二)
- github 删除文件