简单的话这样处理吧:
1.不管符号(32位的最高位),小于0.0的就认为是0.
方法:a.如果有移位运算,左移一位,移出位如果是1(或判断大于0),那就是负数,按0处理.
b.如果没有移位算符,那就把这个数(或者这个数的高16位),除以80000000h(十六进制0x,或十六位32768),如果结果大于0(=1),就是负数.除以2是和移位一样的.
你的例子:4376-0000,除以8000-0000(或者高十六位4376除以8000即32768),结果是0,是正数.
但负数的情况也要考虑,因为不考虑负数,可能会误认为是很大的正数.
2.取符号位(最高位)紧接的8位,减去127,大于0的话,留用(记着E,指数的意思).当然这个数要小于0,就认为是小数,也把整个数按0考虑.
至于怎么取这8位,按以上移位或乘除2的几次方的办法.下同.
你的例子:4376-0000(0100-0011-0111-0110-后面16个0),是134(100-0011-0),减去127=7.
3.再把接着的23位里,取E位,在前面再填个二进制1.就是你要的整数了.
你的例子:E=7,取后续7位是111-0110,再前面添个1是1111-0110.这个数就是246了.
前面怎么添1,可以用加法,也可以用"或"算法.
以上是浮点(32位)转整数(16位)的简单办法,适用于知道大致数值范围的情况.
11-08-22 09:51