#include<stdio.h>
#include<stdlib.h>
unsigned intsqrt_16(unsigned long M)
{
unsigned int N,i;
unsigned long tmp,ttp;
if(M==0)return 0;
N=0;
tmp=(M>>30);
M<<=2;
if(tmp>1)
{
N++;
tmp-=N;
}
for(i=15;i>0;i--)
{
N<<=1;
tmp<<=2;
tmp+=(M>>30);
ttp=N;
ttp=(ttp<<1)+1;
M<<=2;
if(tmp>=ttp)
{
tmp-=ttp;
N++;
}
}
return N;
}
int main()
{
int test=100100;
printf("开方后:%d\n",intsqrt_16(test));
system("PAUSE");
return 0;
}
位运算开方
最新推荐文章于 2020-09-04 09:44:43 发布