您的位置:首页 > Web前端

通过移位把十进制转换成二进制和十六进制

2012-09-24 21:49 375 查看
这个试题可以充分考到个人对以为和与的操作

char *int_to_bit(long data)
{
int bit_num=sizeof(long)*8;
char *temp_bit=(char*)malloc(bit_num+1);
temp_bit[bit_num]='\0';
for (int i=0;i<bit_num;i++)
{
temp_bit[i]=data&(1<<(31-i));
temp_bit[i]=temp_bit[i]>>(31-i);
if (temp_bit[i]==0)
{
temp_bit[i]='0';
}
else
{
temp_bit[i]='1';
}

}
return temp_bit;
}
//intto16
char *int_to_16(unsigned long data)
{
char* buffer = (char*)malloc(11);
buffer[0] = '0';
buffer[1] = 'x';
buffer[10] = '\0';
char *temp=buffer+2;
int d=0x0000000f;

for (int i=0;i<8;i++)
{
temp[i]=(data>>(28-4*i))&d;
temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16; //如果得到负值数
temp[i] = temp[i] < 10 ? temp[i]+48 : temp[i] + 55; //查看ascii码对应的数值
}
return buffer;

//
}

我对上面的程序做了一定的改进,比较容易理解

char *int_to_bit(long data)
{
int bit_num=sizeof(long)*8;
char *temp_bit=(char*)malloc(bit_num+1);
temp_bit[bit_num]='\0';
//d=0;
int d;
for (int i=0;i<bit_num;i++)
{
d=(data>>(31-i)&(1));
//temp_bit[i]=temp_bit[i]>>(31-i);
if (d==0)
{
temp_bit[i]='0';
}
else
{
temp_bit[i]='1';
}

}
return temp_bit;
}
//intto16
char *int_to_16(unsigned long data)
{
char* buffer = (char*)malloc(11);
buffer[0] = '0';
buffer[1] = 'x';
buffer[10] = '\0';
char *temp=buffer+2;
int d=0x0000000f;
int d1;

for (int i=0;i<8;i++)
{
d1=(data>>(28-4*i))&d;
// 		temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16; //如果得到负值数
// 		temp[i] = temp[i] < 10 ? temp[i]+48 : temp[i] + 55; //查看ascii码对应的数值
if (d1<10)
{
temp[i]=d1+'0';
}
else
{
temp[i]=d1+55;
}
}
return buffer;

//
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  buffer