这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 求十进制数A(无符号32位)的最高位。

共2条 1/1 1 跳转至

求十进制数A(无符号32位)的最高位。

工程师
2013-02-21 00:42:18     打赏

看了版主 jobs 的 如何快速取得到一个整数的最高位,有点自己的想法。希望能抛砖引玉。如果有问题,大家一起讨论下。

题目:求十进制数A(无符号32位)的最高位。

    解:计算机中的数都是2进制的。一般解法,用二进制转十进制的算法(除10取余逆序排),得十进制数,对应的最高位也就出来了。但如果数比较大,可能就要较多次循环了。
    我的想法是用A先除以一个较大的数(10^N),把A转换为较小的数B。再来求B的最高位。
    N的值的求法,因为2^7=128 约等于10^2,四位二进制是最接近一位十进制的数。所以把计算机中的数的有效位分成两部分,包含十进制最高位的前四位,和不包含十进制最高位后M位。N=(M/7)*2。
  
具体做法(小端模式):
1)A强制转换成32位,每次右移1位,直到最高位为1得X,并记下右移次数a,N=32-a-4;
2)X&0xf0000000,再左移m位,得b。
3)z=(N/7)*2;
4)如果在z大于0,则Q=10^z,B=b/Q,否则,B=b;
5)重复 (C=B%10,B=B/10)如果B=0,则C就是结果;

 




关键词: 十进制     无符号     32位     高位    

院士
2013-02-21 11:22:45     打赏
2楼

这个想法挺新鲜的。使用移位计算能大大缩短计算时间,以提高效率。


p.s. 加积分10个……


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]