十进制数x,若能表示为,n为大于等于0的整数。n=i+4j。i取值为0、1、2和3。综合i和j,若i为0,则该16进制数为1后面加j个0;若i为1,则该16进制数为2后面加j个0;若i为2,则该16进制数为4后面加j个0;若i为3,则该16进制数为8后面加j个0。
源程序
unsigned int Fun1(unsigned int j,unsigned int a);
void main() //10进制数转化为16进制数
{
unsigned int x,y,i,j,n,a;
n=0;x=32768;
if(x==1)y=1;
while(x!=1) //2的n次幂为x,求n
{
x>>=1;
n++;
}
i=n%4; j=n/4; //根据n=i+4*j,求i和j
switch(i) //由i的值,给Fun1()函数传递不同的参数求得y
{
case 0: a=1;y=Fun1(j,a);break;
case 1: a=2;y=Fun1(j,a);break;
case 2: a=4;y=Fun1(j,a);break;
case 3: a=8;y=Fun1(j,a);break;
}
}
unsigned int Fun1(unsigned int j,unsigned int a)
{
unsigned z;
if(j==0)
z=0x0|a;
else if(j==1)
{a<<=4;
z=0x00|a;}
else if(j==2)
{a<<=8;
z=0x000|a;}
else if(j==3)
{a<<=12;
z=0x0000|a;}
return z;
}
程序运行后,y=0x8000。