编写一个函数,打印一个整数的二进制数
在二进制中,奇数的尾数一定是1,偶数的尾数一定是0,
我们要设计一个以二进制形式表示整数的方法或算法。例如,如何用二进制表示十进制数5?在二进制中,奇数的末尾一定是1,偶数的末尾一定是0,所以通过5%2即可确定5的二进制数的最后一位是1还是0.一般而言,对于数字 n ,其二进制的最后一位是 n &2。因此,计算的第一位数字实际上是待输出二进制数的最后一位。这一规律提示我们,在递归函数的递归调用之前计算n82,在递归调用之后打印计算结果。这样,计算的第1个值正好是最后一个打印的值。
要获得下一位数字,必须把原数除以2。这种计算方法相当于在十进制下把小数点左移一位,如果计算结果是偶数,那么二进制的下一位数就是0:如果是奇数,就是1。例如,5/2得2(整数除法),2是偶数(2%2得0),所以下一位二进制数是0.到目前为止,我们已经获得01。继续重复这个过程。2/2得1,1%2得1,所以下一位二进制数是1。因此,我们得到5的等价二进制数是101。那么,程序应该何时停止计算?当与2相除的结果小于2时停止计算,因为只要结果大于或等于2,就说明还有二进制位。每次除以2就相当于去掉一位二进制,直到计算出最后一位为止。
#include <stdio.h>
void to_binary(unsigned long n);
int main(void){
unsigned long number;
printf("Enter an integer (q to quit):\n");
while(scanf("%lu",&number)==1){
printf("Binary equivalent:");
to_binary(number);
putchar('\n');
printf("Enter an integer (q to quit):\n");
}
printf("Done.\n");
return 0;
}
void to_binary(unsigned long n){
int r;
r= n % 2 ;
if(n>=2)
to_binary(n/2);
putchar(r==0 ? '0':'1');
return ;
}
运行结果: