今天突然做到这道题,还是记录一下(是用Devc++调试的):
首先是对代码的基本定义:
#include <stdio.h>
int main(){
int num = 0;
printf("请输入一个数:");
scanf("%d", &num);
int arr[10] = {0};//用一个长度为10的数组来接收二进制数,数字零是该数组的起始值,(但是长度可以按照自己需求来)
int index = 0;
arr[index] = num % 2;//对目标数取余,并且数组接收第一个二进制数
index++;//数组的名字可以表示数组的第一个地址,++表示地址加1
其次是本次代码的核心思想:
while (1){//使用一个while循环来取接下来二进制数,括号里的1相当于就是不需要值
num = num / 2;//获取目标数被除了之后的值
arr[index] = num % 2;//获取第二个二进制数
index++;//数组地址+1
if (num < 2){//当条件为1时
break;//跳出整个循环
}
}
最后是二进制数的一个输出:
int sz = sizeof(arr) / sizeof(arr[0]);//获取数组的长度,总的字节长大小/单个元素的字节大小
//对数组的倒序的遍历,因为arr[0]存储的是二进制的第一位,所以以此类推,采用数组的倒叙来遍历
for (int i = sz - 1; i >= 0; i--){
printf("%d", arr[i]);
}
printf("\n");
return 0;
}
最后是整体的一个代码:
#include <stdio.h>
int main(){
int num = 0;
printf("请输入一个数:");
scanf("%d", &num);
int arr[10] = {0};//用一个长度为10的数组来接收二进制数,数字零是该数组的起始值,(但是长度可以按照自己需求来)
int index = 0;
arr[index] = num % 2;//对目标数取余,并且数组接收第一个二进制数
index++;//数组的名字可以表示数组的第一个地址,++表示地址加1
while (1){//使用一个while循环来取接下来二进制数,括号里的1相当于就是不需要值
num = num / 2;//获取目标数被除了之后的值
arr[index] = num % 2;//获取第二个二进制数
index++;//数组地址+1
if (num < 2){//当条件为1时
break;//跳出整个循环
}
}
int sz = sizeof(arr) / sizeof(arr[0]);//获取数组的长度,总的字节长大小/单个元素的字节大小
//对数组的倒序的遍历,因为arr[0]存储的是二进制的第一位,所以以此类推,采用数组的倒叙来遍历
for (int i = sz - 1; i >= 0; i--){
printf("%d", arr[i]);
}
printf("\n");
return 0;
}