部分进制转化(c 语言实现)
文章目录
一、二进制转化为其他进制数
-
因为我们要将二进制数转化为其他进制数,所以第一步就是要确保输入的值为二进制数。
主要 是判断每一位数 要不是 1,要不是 0就可以
int InputNum(int n) // 这个 n 可以定义在函数内部
{
printf("请输入对应的二进制数\n");
int num;
scanf("%d", &n);
num = n;
while (num > 0)
{
while (num % 10 != 0 && num % 10 != 1) //判断 是否为 1 或是 0
{
printf("输入错误,请重新输入\n");
scanf("%d", &num);
if (num % 10 == 0 || num % 10 == 1)
{
break;
}
}
num = num / 10; // 第一位 为 二进制数时,判断第二位
}
return n; //这个可以不写
}
2. 最后是主函数的编写
由于二进制数转化为十进制数 的 方法为 如下图所示
所以主函数的编写为:
int main()
{
int remainder, number = 0, decimal_number = 0, temp = 1;
number = InputNum(number);
int n = number;
// Iterate over the number until the end.
while (number > 0)
{
remainder = number % 10;
number = number / 10;
decimal_number += remainder * temp;
temp = temp * 2;
}
printf("八进制数:%lo\n", decimal_number); //使用 c 语言自带的语法进行十进制转化为其他进制数
printf("十进制数:%d\n", decimal_number);
printf("十六进制数:%lx\n", decimal_number);
}
上面的代码,我们使用了 lo lx 来转化 十进制 转化为 其他进制数,那么我们自己如何来实现呢?
下面给出 二进制转化为八进制的方法。
八进制 是由 三位 二进制数组成 (2^3 = 8)
int main(void)
{
int binary_num, d = 0, base = 1, remainder, td, res = 0, ord = 1;
printf("Enter the binary no: ");
scanf("%d", &binary_num);
td = binary_num;
while (td > 0)
{
d = 0, base = 1;
for (int i = 0; i < 3; i++) //每三位数计算 大小
{
remainder = td % 10;
td /= 10;
d += (base * remainder);
base *= 2;
}
res += d * ord; // 实现 1*10 变成十位
ord *= 10;
td = td / 1000; //减去三位数,一个八进制数为 三个 二进制数组成
}
printf("\nOctal equivalent is: %d", res);
return 0;
}
至于十六进制,这里就不给出具体方法了,2^4 = 16, 所以每 四 位二进制数可以转化为 一个十六进制数。
二、十进制数转化为二进制数
十进制转化为二进制数的方法就是,对 2 求 余,再从下往上 写出即是 十进制对应的 二进制数
原谅我,这画图工具实在没怎么用过。
while (inputNumber > 0)
{
re = inputNumber % 2; //对2 求余
inputNumber = inputNumber / 2; //换下一位数
bits[i] = re;
i++;
}
printf("\n the number in binary is: ");
for (j = i - 1; j >= 0; j--) //倒序写出
{
printf("%d", bits[j]);
}
if (i == 0) //如果输入的 值为 0
{
printf("0");
}
至于其他进制转化,有兴趣可以自己去查找方法。我一般都是使用 先转化为 二进制再转化为 其他进制数。
最后
有什么问题,欢迎在评论区指出,可以一起讨论。