计算机只认识二进制数(0和1),因为计算机是机器,它由逻辑电路组成,而逻辑电路一般情况下有两种状态,这两种状态分别是开关的闭合和断开,逻辑电路的这两种状态刚好就对应了二进制的 "1" 和 "0” 。常见的进制数有二进制、八进制、十进制、十六进制。在不同的进制之间还可以相互转换,如:二进制转十进制,十进制转二进制等等。今天我来给大家分享如何运用C语言编写代码来实现进制数之间的互相转换。
认识进制数
二进制:用 0、1 表示,逢二进一。如 1、10、100等;
八进制:用 0 ~ 7 表示,逢八进一。如 1、7、11等;
十进制:用 0 ~ 9 表示,逢十进一。如 1、3、5等;
十六进制:用 0 ~ 9 、A~F,逢十六进一。如1A,2B,3C等;
十进制转换二进制
核心思路
将一个十进制数除二取余数,最后将余数逆序排列,就可以得到这个十进制数对应的二进制数了。举个简单的例子:
求十进制数75的二进制数:
75 ÷ 2 = 37 ······ 1
37 ÷ 2 = 18 ······ 1
18 ÷ 2 = 9 ······ 0
9 ÷ 2 = 4 ······ 1
4 ÷ 2 = 2 ······ 0
2 ÷ 2 = 1 ······ 0
1 ÷ 2 = 0 ······ 1
将上面的余数逆序排列,得到十进制数75的二进制数为1001011
那么,如何写代码呢?
通过上述的算术观察,发现取余的这个动作是重复的,因此,写代码时,我们可以用while循环做取余这个动作,其中,每次取余的余数可以用一个变量装起来。最难的就是逆序排列了,有人可能会想到用数组记下每一次取余的余数,最后倒序遍历数组输出余数,我觉得用数组复杂化了问题,当我们从上往下看余数,不难发现第一个余数对应的是二进制数的个位,而第二位余数对应的是二进制的十位数,依次类推,百位、千位等等,不妨再用一个变量i,每次取余的结果乘上i,而i每次循环乘10就能实现从个位进到十位了。
源代码展示
十进制转换二进制源代码如下:
#include <stdio.h>
int conversion(int decimalNumber);
int main()
{
int number;
printf("请输入一个十进制数:\n");
scanf("%d",&number);
printf("十进制数%d转二进制数为%d",number,conversion(number));
return 0;
}
int conversion(int decimalNumber)
{
int binaryNumber = 0,i=1;
while(decimalNumber != 0)
{
binaryNumber += (decimalNumber % 2)*i;
decimalNumber /= 2;
i *= 10;
}
return binaryNumber;
}
运行编译输入一个十进制数75,输出以下结果:
十进制数75转换二进制数为1001011
二进制转换十进制
核心思路
从右到左将一个二进制数的每一位数乘以二的相应次方,然后就可以等得到这个二进制的十进制数了。举个简单的例子:
(1110)2 = 1 x 23 + 1 x 22 + 1 x 21 + 0 x 20 = 8 + 4 + 2 + 0 =14
那么,如何写代码呢?
将一个二进制数除以十取余得到二进制的个位数,然后利用C语言头文件 math.h 中的 pow(); 函数,将这个二进制的个位上的数乘以二的零次方,依次类推,二进制数的十位上的数乘以二的一次方,二进制数的百位上的数乘以二的二次方......不难发现,二进制数从右到左每隔一位上的数乘以二的某次方是有规律的,即每次乘完后,次方数都会加一。
源代码展示
二进制数转换十进制数源代码如下:
#include <stdio.h>
#include <math.h>
int conversion (long long binaryNumber);
int main()
{
long long binaryNumber;
printf("请输入一个二进制数:\n");
scanf("%lld",&binaryNumber);
printf("二进制数%lld转换十进制数为%d",binaryNumber,conversion(binaryNumber));
return 0;
}
int conversion (long long binaryNumber)
{
int decimalNumber = 0,i = 0,n;
while(binaryNumber != 0)
{
n = binaryNumber % 10;
binaryNumber /= 10;
decimalNumber += n*pow(2,i);
++i;
}
return decimalNumber;
}
运行编译输入一个二进制数1110,输出以下结果:
二进制数1110转换十进制数为14