算法题:位运算实现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语言,底层位运算)