1. 程式人生 > >C語言 十進位制轉二進位制,並儲存在陣列中

C語言 十進位制轉二進位制,並儲存在陣列中

#include <stdio.h>
#define uint unsigned int
#define ushort unsigned short

uint transform_data(uint frequence,ushort* pwm_table)
{
	uint temp = frequence;
	int pwm_index = 0;
	
	while(temp)
	{
		pwm_table[pwm_index] = (temp&0x01);
		temp = temp>>1;
		pwm_index++;
	}
	return pwm_index;	
}
int main(){
	uint frequence = 2;
	//scanf("%d",&frequence);		
	ushort pwm_table[15] = {0};
	uint off_set;
	
	off_set = transform_data(frequence,pwm_table);
	
	int i=0;
	for(i=off_set-1;i>=0;i--)
	{
		printf("%d",pwm_table[i]);
	}			
	return 0;
}
//輸出結果:10

以前寫的時候,總是想著要對2取餘,再除2,今天看到別人寫的程式,才想起來,直接取他的最低位,然後右移就是除2。(~o ̄3 ̄)~

 

》————————————————————————————————————————————————《

上次寫的只能轉換正數,現在又把負數加上去了,感覺程式寫的太繁瑣了,有沒有更簡單的方法。

#include <stdio.h>
#define uint unsigned int
#define ushort unsigned short
//求2的N次方  
int cifang(int n)
{
	int i = 0,sum = 1;
	for(i = n;i>0;i--)
	{
		sum *= 2;
	}
	return sum;
}
//十進位制正數轉換成二進位制數 
uint transform_data_zhengshu(uint frequence,ushort* pwm_table)
{
	uint temp = frequence;
	int pwm_index = 0;
	
	while(temp)
	{
		pwm_table[pwm_index] = (temp&0x01);
		temp = temp>>1;
		pwm_index++;
	}
	return pwm_index-1;	
}

uint transform_data(int frequence,ushort* pwm_table)
{
	int temp = frequence;
	int pwm_index = 0;
	ushort pwm_temp[15]={0};
	//負數	
	if(frequence<0) 
	{
		//先將負數轉換成正數 
		temp = -frequence;
		
		//求出這個正數temp的二進位制並存放在pwm_temp中	
		transform_data_zhengshu(temp,pwm_temp);
		
		//將這個正數temp的二進位制pwm_temp取反並轉換成十進位制數 sum 
		int sum = 0;
		int i = 0;
		for(i = 0;i < 15;i++)
		{
			if(pwm_temp[i]==0)
				pwm_temp[i]=1;
			else
				pwm_temp[i]=0;
		
			sum += cifang(i)*pwm_temp[i];			
			pwm_temp[i] = 0;
		}
		
		//將轉換出來的十進位制數sum加一 
		sum += 1;
		//printf("sum=%d\n",sum);
		
		//最後再轉成二進位制pwm_table
		return transform_data_zhengshu(sum,pwm_table);		
	}
	
	//正數 
	return transform_data_zhengshu(frequence,pwm_table);					
}

int main(){
	int frequence = -2;
	//scanf("%d",&frequence);	
	ushort pwm_table[15] = {0};
	uint off_set;
	
	off_set = transform_data(frequence,pwm_table);
	
	int i=0;
	for(i=off_set;i>=0;i--)
	{
		printf("%d",pwm_table[i]);
	}
	return 0;
}