解决方法: 一、递归处理倒序(除二取余) 代码:
#include <stdio.h>
void to_binary(unsigned long n);
int main(void)
{
int a;
puts("请输入一个整数");
scanf("%ud",&a);
printf("该整数的二进制形式为:");
to_binary(a);
return 0;
}
void to_binary(unsigned long n){
int r = n % 2;
if(n >= 2){
to_binary(n/2);
}
putchar(r == 1? '1' : '0');
}
运行截图:
二、C语言的位操作 代码:
#include <stdio.h>
#include<limits.h>
void itobs(int ,char *);
void show_bstr(const char *);
const static int size = CHAR_BIT*sizeof(int);
int main(void)
{
char arr[size+1];
int a;
puts("请输入一个整数");
scanf("%d",&a);
itobs(a,arr);
printf("该整数的二进制形式为:");
show_bstr(arr);
return 0;
}
void itobs(int n, char * pc){
int i;
for(i=1; i<=size; i++, n>>=1){
pc[size - i] = (01 & n) + '0';
}
pc[size] = '\0';
}
void show_bstr(const char * str){
int i = 0;
while(str[i] != '\0'){
putchar(str[i]);
if(++i%4 == 0 && str[i]){
putchar(' ');
}
}
}
代码:第23行:字符数组需要的是字符,但是n和八进制01进行与操作之后得到的是0或1,所以需要后面加上字符‘0’来完成这种转换。怎么?,你还不懂?这个成立也是要以代码中的数字被按顺序编码(换句话说,以ASCII码为标准解释数字)为条件。 运行截图: 代码中有注释:但是还是要具备隔一段时间还能看懂自己写的代码的能力。
|