这个试题可以充分考到个人对以为和与的操作
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;
//
}