十进制转为二进制

总结:一个十进制的整数转为二进制形式的方法  c语言

**


一.除二取余法

   算法思路:输入一个十进制整数,转化为二进制,可以用短除法求一个数的二进制,短除法除完后是将余数从下往上记录即为输入整数对应的二进制形式,所以可以考虑用递归。

用递归一定要有结束条件:当传进去的参数除2为0时结束

 例如:输入5

 5/2=2.......1  
 2/2=1.......0     
 1/2=0.......1     
逆序从下往上输出:101(所求二进制形式)


递归算法如下:

void Fun(int i)
{
	if (i/2 != 0)
	{
		Fun(i / 2);
	}
	printf("%d", i % 2);
}

int main()
{
	int i = 0;
	printf("请输入一个十进制整数:", i);
	scanf("%d", &i);
	Fun(i);
	printf("\n");
	system("pause");
	return 0;
}



二.移位运算法

   算法思路:整型数存储在计算机中占4个字节,即是有32个比特位。可以用关键字sizeof求出字节数,然后用字节数乘8即可求出所占比特位数。最高位:所占比特位-1 最低位:0
   可以用一个循环,从最高位到最低位一位一位输出
   在这里就要用到移位运算符啦,要想得到最高位的数,需要将数向右移动(所占比特位-1)位,这时最高位数就被移到最右边的位置,此时将移位后的数与上1(1&1=1,1&0=0),输出即可。

例如:5

 二进制表示 
 
00000000  00000000  00000000  00000101
将上述32位向右移动31位得到如下
00000000  00000000  00000000  0000000 **0**(最高位的0)& 1     得到最高位
.......
.......
......
......
....
00000000  00000000  00000000  00000101
将上述32位向右移2位得到如下
 00000000  00000000  00000000  0000000 **1**(倒数第3位) & 1  得到倒数第三位

算法如下:

void Fun(int x)
{
	int i = sizeof(x)*8-1;
	for (; i>=0; i--)
	{
		printf("%d", (x>>i) & 1);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值