总结:一个十进制的整数转为二进制形式的方法 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);
}
}