我来回答下楼主留下的问题,为什么41F0是30A,为什么4316是150W,为什么4348是200W? 首先要注意断句,不是0x41F0代表30,而是0x41F00000代表30,功率也是一样,都是4个字节,连着后面的0000一起。 这种表示方法是一个国际标准:IEEE 754。我讲的肯定没有国际标准准确,想看原汁原味的可以去看国际标准。 接下来我就简单说下计算方法 4个字节,32个二进制位,分成3个部分 符号位(最高的1位) 阶码(后面的8位) 尾数(最后的23位)
以代表30W的0x41F00000为例子,转换成2进制(高位补0到32位)是01000001111100000000000000000000,分组: 符号位这里是0,说明是正数,如果符号位是1则说明是负数。 接下来计算指数,计算规则是将阶码转成十进制再减127。这里10000011转换成10进制是131,减127得到4,所以指数是4. 接下来计算尾数,尾数的最高位代表二分之一,接下来的一位代表四分之一,接下来代表八分之一,以此类推。具体到这个例子,尾数的最高三位是1,所以1/2+1/4+1/8=0.875。需要注意的是,尾数是从第一个不为零的数开始记录的,因为如果高位有0,则可以计入指数当中,所以尾数的最高位一定是1,既然如此,标准规定这个1在存储时是省略的,所以我们要给0.875再加1,最终的尾数是1.875。 再多说一句,尾数的长度决定了浮点数的精度,或者说是有效数字的位数。 现在我们知道了,这个数是正数,指数是4,尾数是1.875. 那么就来到了最后一步,类似于科学计数法,由于是2进制,所以是2的4次方,而不是10的4次方:1.875 * 2^4 = 30 就是这样。 最后,如果你只想知道结果,其实你也不用学怎么算,有在线的工具可以用。搜索引擎搜索“IEEE 754 浮点数转换”相关字眼,可以搜到很多可用的网站,无需下载注册,在网页上就能自动完成计算。
|