通過移位把十進制轉換成二進制和十六進制

這個試題可以充分考到個人對以爲和與的操作

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;

// 
}



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章