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

这个试题可以充分考到个人对以为和与的操作

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;

// 
}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值