【C语言|算法题(位运算实现float转int)】不使用编程语言的函数,和强制类型转换,基于底层实现,float到int的转换;
float内存分布(32位)
符号位————-指数位—————-尾数位—-
第31位(占1bit)—第30-23位(占8bit)—-第22-0位(占23bit)
int
第31位(占1bit)为符号位,其他为二进制实数为
代码
union Bit
{
//union共用地址空间
float val;
struct M{
unsigned int tail:23;
//获取val的最后23位 即尾码
unsigned int offset:8;
//获取val的中间8位 即阶码+偏移量
unsigned int flag:1;
//获取val的第一位 即符号位
} M;
};
int float2int(float val)
{
if(abs(val) < 0.000001)//如果为0值 直接返回
return 0;
int ret;
//保存返回值
union Bit temp;
temp.val = val;
int offset = temp.M.offset - 127;
//获得偏移量
ret = temp.M.tail;
ret |= 0x00800000;
//将丢弃的1填充回来
ret = ret >> (23-offset);
//移位操作 舍弃小数点后的数字
if(temp.M.flag == 1)//负数
ret = -ret;
return ret;
}
推荐阅读
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 【C】题目|【C语言】题集 of ⑥
- 单片机|自学单片机好找工作吗(会单片机能找什么工作?)
- 单片机|keil把源代码生成lib的方法
- c语言|一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- 个人理解|【C语言基础之类型转换】
- c语言|【C语言】自定义类型 结构体 枚举 联合
- 学习分享|【C语言函数基础】