首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求移位运算“<<”算式解决办法

2012-04-22 
求移位运算“”算式int aint input//这个数的值由用户输入如果输入8,a * input 的结果相当于 a3如果

求移位运算“<<”算式
int a;
int input;//这个数的值由用户输入
如果输入8,a * input 的结果相当于 a<<3;
如果输入16,a * input 的结果相当于 a<<4;
如果输入32,a * input 的结果相当于 a<<5;
如果输入64,a * input 的结果相当于 a<<6;
如果输入128,a * input 的结果相当于 a<<7;
......

现在要把乘法运算转换为更快的移位运算,那么如何求出输入值和移位运算值的对应关系?
输入8求出3
输入16求出4
输入32求出5
输入64求出6
输入128求出7
输入256求出8
等等

[解决办法]
要原理,反过来移位就是了
每次>>1,什么时候变成1,原数就是2的几次方

要快速,直接定个长64的数组,{1,2,4,8,……}和{0,1,2,3……}一一对应就完事了
反正int型最大也就是2的64次方,要快速就拿空间换时间
[解决办法]

C/C++ code
    double i;    cout<<"输入:";        while(cin>>i)        {        int count=0;        double temp=0;        temp=i;              while((int)temp%2==0)       {          count++;         temp=temp/2;                }       cout<<"\t得"<<count<<endl;                 cout<<"输入:";           }    cout<<"结束"<<endl;    return 0;
[解决办法]
一方面,你可以建立倍数和移位数之间的一一对应的关系,比如用stl的map可以很轻松地做到这一点。
二方面,可以用你输入的数字,循环地除以2,并设一个计数器,每除一次2计数器就加1,直到商为1为止,比如输入8,要除以3次2才能得到1,所以8所对应的移位数是3,如此而已。一些特殊情况,可分别处理,比如输入为1这样的情况。

热点排行