浮点数用十六进制表示方式附C代码

IEEE754规定

1、 各个位域意义
符号位    指数位    尾数位

1位       8位       23位

2、指数位正负:  当指数小于127(01111111)时为一个负数,反之为一个正数
    

实数=》小数:
10.625  =>  1010.101  ==> 1.010101 * 2的三次方

按照规则填充4字节空间即为:
符号位:  0
指数位:  3 + 127
尾数位:  01010100000000000000000(共23位)

合并得:
0 10000010 01010100000000000000000 == 0x412A0000

float
共计32位,折合4字节
由最高到最低位分别是第31、30、29、……、0位
31位是符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位。
22-0位,一共23位是尾数位。
每8位分为一组,分成4组,分别是A组、B组、C组、D组。
每一组是一个字节,在内存中逆序存储,即:DCBA

27.0表示成二进制为:11011.0

用科学计数法表示为1.10110*2^4,现在我们要的尾数和指数都出来了。

尾数为:1101 10 (删除前面的第一个1,因为用科学计数法表示,二进制中第一个永远都为1,计算机在存储的时候就没有存储这个1,只存储小数点后面的位数)   不足23位,补0,就是1011 0000 0000 0000 0000 000(23位)

指数:为4 。一共8位,可以表示范围是0 ~ 255的无符号整数,也可以表示-128~127的有符号整数。但因为指数是可以为负的,所以为了统一把十进制的整数化为二进制时,都先加上127。

所以:4+127=131  变成二进制就是10000011

27.0用二进制表示就是:

加上第31位的符号位0

就是0100 0001 1101 1000 0000 0000 0000 0000

十六进制就是:41 D8 00 00

 

再看一个数27.5,二进制为11011.1

1.10111*2^4

尾数(小数点后的数)10111,补够23位 1011 1000 0000 00000000 000

指数:4,加上127,就是131,二进制1000 0011

用二进制表示就是 (符号数位1位)0 (指数位8位)1000 0011 (尾数位23位)1011 1000 0000 00000000 000

写成二进制标准形式:0100 00011101 1100 0000 0000 0000 0000

写成16进制就是41 DC 00 00

uint32_t data2hex(uint16_t data)  
{
	uint32_t temp;  
	uint8_t i=0;  
  
	temp = data;//转存需要计算的数值  
	while(temp)  
	{         
		temp >>= 1;  
		i++;//计算当前值的尾数占有的位数  
	}  
	i--;//计算下来,i会多加一次,这儿减掉  
	temp = data;  //再次赋值,准备合并
	temp = temp<<(23-i);//补足23位尾数  
	temp = (i+127)<<23 | temp;//计算指数,并与尾数合并起来   
	temp = temp & ~(1<<23);//确定正负  我这儿都是正数,就没管负数了  
	
	return temp;//这里就已经是以浮点数的存储方式表示的传进来的参数了
}

附在线计算器:https://www.23bei.com/tool-23.html#

 

QQ图片20160605160238.png

IEEE 754 - 百度百科

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值