1,000,000,000 = 0x3B9A CA00, 20,000 = 0x4E20, 50,000 = 0xC350。 定点运算中小数点在最后面的很容易理解,比如前面几个数: 0x4E20 * 0xC350 = 0x3B9A CA00,也就是2万乘5万等于10亿;
乘数各缩小100倍,十进制也好理解:200.00 * 500.00 = 100,000.0000,十六进制麻烦点:0xC8.00 * 0x1F4.00 = 0x186A0.0000;
如果各缩小256倍,十六进制就比十进好理解:0x4E.20 * 0xC3.50 = 0x3B9A.CA00, 78.125 * 195.3125 = 15,258.7890625,
78 = 0x4E, 195 = 0xC3; 0.125 = 2/16 = 0x0.2 = 0x0.20, 0.3125 = 0.625 / 2 = 5/16 = 0x0.5 = 0x0.50,这就是定点小数的运算和小数点位置变化,于十进制的其实是一样的。
你的0.005893 = 0x0.0182 3422...,取前24Bit = 0x0182 34,除2为:0xC11A = 49434,分辨率为15Bit,有效位数高于你的万分之一;
另外十进制小数转为十六进制有个办法,电脑的计算器中科学计算器功能中有十六进转十进,先十进制下输入小数,然后每乘一次65536,得到小数点后16Bit, 0.005893 *65536 -> 386.203648 -> * 65536 -> 25,310,242.275328 .= 0x0182 3422. 467B... |