一、意义
由于计算机是由一系列电子元件组成的,这些元件只能处理两种状态:开和关。这两种状态可以用二进制表示,其中0代表关闭状态,1代表开启状态。因此,计算机只能存储和处理二进制数。
二、原理方法
除二取余法是一种将十进制数转换为二进制数的方法。其原理如下:
将待转换的十进制数不断除以2,直到商为1为止。每次除法的余数就是二进制数的一位。(由于不断除以2,所以任何数除以2的余数只有1或0)
举个例子,将十进制数27转换为二进制数:
第一步:27 ÷ 2 = 13 余 1,将余数1写在最低位上(也就是书面形式的最右边);
第二步:13 ÷ 2 = 6 余 1,将余数1写在次低位上;
第三步:6 ÷ 2 = 3 余 0,将余数0写在再次低位上;
第四步:3 ÷ 2 = 1 余 1,将余数1写在再再次低位上;
第五步:将第四步3 ÷ 2 = 1的商1写在最高位上(也就是书面形式的最左边);
所以27的二进制表示为11011。
除二取余法的原理可以简单总结为:将十进制数不断除以2,将每次的余数从低位到高位依次写下来,最高位为最后一次的商:1,得到的就是该数的二进制表示。
三、代码实现
当我们理解了上述原理方法以后,就可以思考如何把原理方法使用代码表示出来。
1、首先需要一个循环,用来存放每一次的余数进数组,由于是顺序存储,所以最后需要倒序输出。
2、其次,当商为1的时候结束循环。再把最后一次的商1存入数组的最后一个地址。
3、最后倒序输出即可大功告成。
代码如下:
#include <stdio.h>
8
9 int main(int argc, char *argv[])
10 {
11 int i,n=0;//i是从键盘输入的需要转换的十进制数
12 int a[100];//定义一个数组,用来存放得到的余数1和0
13 printf("请输入一个整数:");
14 scanf("%d",&i);
15 do{
16 a[n]=i%2;//每次存放一个余数进数组,先从a[0]开始存入
17 n++;
18 i=i/2;//此时由于之前的i除以了2,所以下次循环i变成从i/2开始
19 }
20 while(i!=1);//商为1的时候结束循环
21 a[n]=1;//把商1存入数组的最后一个地址
22 printf("这个整数的二进制为:");
23 //倒叙输出数组中的数
24 for(n;n>=0;n--){
25 printf("%d",a[n]);
26 }
27 puts("");//换行符
28 return 0;
29 }
运行结果:
请输入一个整数:5
这个整数的二进制为:101
请输入一个整数:8
这个整数的二进制为:1000