C语言|算法题(位运算实现float转int)

【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; }

    推荐阅读