这篇文章主要介绍“C语言如何实现常见进制转换”,在日常操作中,相信很多人在C语言如何实现常见进制转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言如何实现常见进制转换”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一、十进制数转换为二进制数、八进制数
方法:举例将十进制数100转换为二进制数,就是将100与2相除,得到商以及余数,再将商与2不断相除,最终除到商为0。按顺序记录下余数,再将余数逆序输出,即为二进制的结果。八进制同理,商不断与8相除,最终除到商为0,按顺序记录下余数,再将余数逆序输出,即八进制的结果。此方法同样可以推广到要转换成二到九的任何一种进制。
图形如下:
代码如下:
#include <stdio.h>int main(){ int x, n; scanf("%d %d", &x, &n);//x是要转换的十进制数,n为要转换成的进制 int arr[100] = { 0 };//创建一个足够大的数组来存放余数 int i = 0,j = 0; while (x) { arr[i++] = x % n;//存放余数,i最后的值正好是余数的个数 x /= n; } for (j = i - 1; j >= 0; j--) { printf("%d", arr[j]);//余数倒序输出 } printf("\n"); return 0;}
二、十进制转换为十六进制
将十进制转换为十六进制同样需要用到将商不断除16以及逆序输出等方法,但由于十六进制中会出现A\B\C\D\E\F等字符,所以还需要将取得的余数做进一步转换。代码如下:
#include <stdio.h>int main(){ int x; scanf("%d", &x); char arr[100] = { 0 };//因为十六进制中会出现A\B\C\D\E\F等字符,所以保存余数的数组类型应定义为char int i = 0, j = 0; while (x) { arr[i++] = x % 16; x /= 16; } for (j = 0; j < i; j++) { //将取出的余数转换为对应的字符 switch (arr[j]) { case 10:arr[j] = 'A'; break; case 11:arr[j] = 'B'; break; case 12:arr[j] = 'C'; break; case 13:arr[j] = 'D'; break; case 14:arr[j] = 'E'; break; case 15:arr[j] = 'F'; break; default:arr[j] += 48; } } for (j = i - 1; j >= 0; j--) { printf("%c", arr[j]);//逆序打印 } printf("\n"); return 0;}
三、二进制数、八进制数转换为十进制数
方法:需要将输入的数的每一位取出,再与这个位上的权重相乘,最后相加得到结果。
代码如下:
#include <stdio.h>#include <math.h>int main(){ int n = 0, sum = 0, i = 0, x = 0; scanf("%d %d", &x, &n);//x为输入的二进制或八进制的数,n为进制。 while (x) { sum += (x%10)*pow(n, i++);//x%10将x的每一位取出,再与这个位上的权重相乘。 x /= 10; } printf("%d\n", sum); return 0;}
四、十六进制数转换为十进制数
十六进制中含A\B\C\D\E\F等字符,所以在输入的时候可以将其看成输入一个字符串,需要先将每位上的字符转换为对应的数字与本位上的权重相乘,再相加得到最后的值。
代码如下:
#include <stdio.h>#include <string.h>#include <math.h>int main(){ char arr1[100] = { 0 }; scanf("%s", arr1); int len = strlen(arr1); int i = 0, sum = 0; for (i = 0; i<len; i++) { int temp = 0; switch (arr1[i]) { case 'A':temp = 10; break; case 'B':temp = 11; break; case 'C':temp = 12; break; case 'D':temp = 13; break; case 'E':temp = 14; break; case 'F':temp = 15; break; default:temp = arr1[i] - '0'; break; //将各个位上的字符转换为对应的数字 } sum += temp * pow(16, len-i-1);//各个位上的权重相乘再相加 } printf("%d\n", sum); return 0;}
到此,关于“C语言如何实现常见进制转换”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!