C中十进制转二进制的方法

1.比较简单的除法求余数,最终返回一个整形数,处理数字过大会溢出,不推荐。

#include"stdio.h"
#include"stdlib.h"

int DecimalToBinary(int input);

int main(void)
{
	int input,result;

	printf("INPUT:");
	scanf("%d",&input);
	
	result = DecimalToBinary(input);
	printf("%d的二进制格式为:%d\n",input,result);

	exit(0);
}

/*	十进制转二进制函数
 *	@result		:返回值,以十进制格式显示二进制
 *	@time		:取余次数	
 *	@remainder	:暂时存放余数
 *	注:1.如果输入的数太大会溢出,2.不能直接打印出负数在计算机中的二进制格式。
 *		eg: int:-2,147,483,648 ~ 2,147,483,647 一共是10位 ,如果输入的数的二进制格式是11位则会溢出
 *		eg: -220 只会输出: -11011100
 * */
int DecimalToBinary(int input)
{
	int result,time,remainder;
	time = 1;
	result = 0;
	while(input)
	{
		remainder = input % 2;
		result += remainder * time;
		time *= 10;
		input /= 2;
	}
	return result;
}

2.通过取余数返回一个数组的形式,可以用,自己注意处理负数时另外添加负号吧。

#include"stdio.h"
#include"stdlib.h"

int DecimalToBinary(int input,int *result);

int main(void)
{
	int input,len;
	int result[32] = {0};

	printf("INPUT:");
	scanf("%d",&input);

	len = DecimalToBinary(input,result);
	
	for(int i = len; i >= 0; i--)
		printf("%d",result[i]);
	printf("\n");
	
	exit(0);
}
/*	十进制转二进制函数
 *	@input		:要处理的数
 *	@result		:转换结果存储地址
 *	注:(负数返回结果为:绝对值的二进制)
 * */
int DecimalToBinary(int input,int *result)
{
	int i=0;
	if(input == 0) return 0;
	while(input)
	{
		result[i] = abs(input % 2);   //如果input是负数则每次存到result中的数都为负数,所以这里加了绝对值。
		input /= 2;
		i++;
	}
	return --i;
}

3.通过位操作直接获取二进制,推荐这个,运行效率高

#include"stdio.h"
#include"stdlib.h"

int DecimalToBinary(int input,int *result);

int main(void)
{
	int input;
	int result[32]={0};

	printf("INPUT:");
	scanf("%d",&input);

	DecimalToBinary(input,result);
	
	for(int i = 0; i < 32; i++)
		printf("%d",result[i]);
	printf("\n");
	
	exit(0);
}
/*	十进制转二进制函数
 *	@input		:要处理的数
 *	@result		:转换结果存储地址
 *	注:(负数的转换结果为:绝对值转二进制取反加1,显示位数为32位,每一位均以int型存储到地址)
 * */
int DecimalToBinary(int input,int *result)
{
	int time,i;
	
	time = 31;
	i = 0;
	while(time >= 0)
	{
		result[i] = input >> time & 1;
		time--;
		i++;
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值