因为掩藏的事没有不显出来的;隐瞒的事没有不露出来被人知道的。
——路加福音【8:17】
一、说明
1.本文为各传感器合理范围内的数值(DATA)提供数据表示方案。
2.数据由四个字节组成,能够表示正负数、范围内的单精度浮点数。
3.取值范围:
4.最接近于零的值:
5.有效精度为0.0005。由于采用IEEE754表示的数据,当表示较大数据时有效精度偏大,故不采用IEEE754标准的数据表示方法。
6.本文中的十六进制数值总称统一使用DATA表示。
二、标准数据格式
1.格式说明
★DATA共计32位(4字节)
★31位是符号位,1表示该数为负,0表示该数为负
★30~26位一共5位是 指数位(-16~15)
★25~0位一共26位是尾数位,尾数的编码为原码
从逻辑上用三元组{S,E,M}来表示一个数N:
2.数据表示
◆表达式:
◆说明:
n,s,e,m分别为N,S,E,M对应的实际数值,而N,S,E,M仅仅是一串二进制位。
★ S(sign)表示N的符号位。对应值s满足:n>0时,s=0; n<0时,s=1。
★ E(exponent)表示N的指数位,位于S和M之间的若干位。对应值e值也可正可负。
★ M(mantissa)表示N的尾数位,包含数据的整数部分和小数部分,根据指数位进行区分。
3.计算方法
☆s的取值为0或1;
☆m包含的位数为26个bit位;
☆隐含位:表达式中 1.m 中小数点左边的那一位被称作隐含位,隐含位大多数情况下为1,只有当E为0的情况下为0。
☆本算法的偏置量为16。
☆e的值计算方式:
当E∈(0,25-1]时,e=E-16,例E=10101,所以e=22-16=6;
当E=0时,e=1-16;
依据隐含位和E值的处理能够实现大于1和小于1的正数之间的平滑过度。
三、数据转化用例
1.特殊用例
表示最大正数
二进制:0111 1111 1111 1111 1111 1111 1111 1111
十六进制:7F FF FF FF
计算过程:
s=0
e=(11111)2-(16)10=15
m=(11 1111 1111 1111 1111 1111 1111)2
∴N = (-1)0*(1.11 1111 1111 1111 1111 1111 1111)2*215
= 216-(1/2)11= 65535.99951171875
表示的值为:65535.99951171875
表示最小负数
二进制:1111 1111 1111 1111 1111 1111 1111 1111
十六进制:FF FF FF FF
计算过程:
s=1
e=(11111)2-(16)10=15
m=(11 1111 1111 1111 1111 1111 1111)2
∴N = (-1)1*(1.11 1111 1111 1111 1111 1111 1111)2*215
= -216+(1/2)11= -65535.99951171875
表示的值为:-65535.99951171875
表示最接近于0的正数
二进制:0000 0000 0000 0000 0000 0000 0000 0001
十六进制:00 00 00 01
计算过程:
s=0
e=(1)10-(16)10= -15
m=(00 0000 0000 0000 0000 0000 0001)2
∴N = (-1)0*(0.00 0000 0000 0000 0000 0000 0001)2*2-15
= 2-41 = 4.5474735088646411895751953125*10-13
表示的值为:4.5474735088646411895751953125*10-13
表示最接近于0的负数
二进制:1000 0000 0000 0000 0000 0000 0000 0001
十六进制:80 00 00 01
计算过程:
s=1
e=(1)10-(16)10= -15
m=(00 0000 0000 0000 0000 0000 0001)2
∴N = (-1)1*(0.00 0000 0000 0000 0000 0000 0001)2*2-15
= -2-41 = -4.5474735088646411895751953125*10-13
表示的值为:-4.5474735088646411895751953125*10-13
两种方式表示的过渡值
二进制:0000 0011 1111 1111 1111 1111 1111 1111
十六进制:03 FF FF FF
计算过程:
s=0
e=(1)10-(16)10= -15
m=(11 1111 1111 1111 1111 1111 1111)2
∴N = (-1)0*(0.11 1111 1111 1111 1111 1111 1111)2*2-15
= (1-2-26) *2-15= 3.051757767025264911353588104248*10-5
表示的值为:3.051757767025264911353588104248*10-5
二进制:0000 0111 1111 1111 1111 1111 1111 1111
十六进制:07 FF FF FF
计算过程:
s=0
e=(000 01)2-(16)10= -15
m=(11 1111 1111 1111 1111 1111 1111)2
∴N = (-1)0*(1.11 1111 1111 1111 1111 1111 1111)2*2-15
= (2-2-26) *2-15= 6.103515579525264911353588104248*10-5
表示的值为:6.103515579525264911353588104248*10-5
1的表示
二进制:0100 0000 0000 0000 0000 0000 0000 0000
十六进制:40 00 00 00
计算过程:
s=0
e=(100 00)10-(16)10= 0
m=(00 0000 0000 0000 0000 0000 0000)2
∴N = (-1)0*(1.00 0000 0000 0000 0000 0000 0000)2*20
= 1
表示的值为:1
2.典型用例
①十进制数:1234.5678
计算过程:
1234.5678 = 210+27+26+24+21+2-1+2-4+2-8+2-10+2-12+2-13+2-15+2-16
≈1234.5677947998046875
s=0
e=10,E=10+16=(26)10=(11010)2
m=10011010010.1001000101011011,M=00 1101 0010 1001 0001 0101 1011
二进制数:0110 1000 1101 0010 1001 0001 0101 1011
十六进制数:68 D2 91 5B
②十进制数:37.61
计算过程:
37.61 = 25+22+20+2-1+2-4+2-5+2-6+2-11+2-13+2-17+2-18+2-19+2-20
≈37.60999965667724609375
s=0
e=5,E=5+16=(21)10=(10101)2
m=100101.100111000010100011110,M=00 1011 0011 1000 0101 0001 1110
二进制数:0101 0100 1011 0011 1000 0101 0001 1110
十六进制数:54 B3 85 1E
③十进制数:-99.3745
计算过程:
99.3745 = 26+25+21+20+2-2+2-4+2-5+2-6+2-7+2-8+2-9+2-10+2-12+2-13+2-14+2-15+2-16+2-19+2-20
≈99.37449932098388671875
s=1
e=6,E=6+16=(22)10=(10110)2
m=1100011.01011111110111110011,M=10 0011 0101 1111 1101 1111 0011
二进制数:1101 1010 0011 0101 1111 1101 1111 0011
十六进制数:DA 35 FD F3
④十进制数:-8.875
计算过程:
8.875 = 23+2-1+2-2+2-3
s=1
e=3,E=3+16=(19)10=(10011)2
m=1000.11100000000000000000000,M=00 0111 0000 0000 0000 0000 0000
二进制数:1100 1100 0111 0000 0000 0000 0000 0000
十六进制数:CC 70 00 00