C语⾔的进制转换及算法实现教程
1、其他进制转⼗进制
1.1、⼆进制转⼗进制
转换规程:从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次⽅,然后求和,例如:
⼆进制 1011 = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 11
1.2、⼋制转⼗进制
转换规则:从最低位开始,将每个位上的数提取出来,乘以8的(位数-1)次⽅,然后求和,例如:
⼋进制 0123 = 3*8^0 + 2*8^1 + 1*8^2 = 3+16+64 = 83
1.3、⼗六进制转⼗进制
转换规则:从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次⽅,然后求和,例如:
⼗六进制 0x34A = 10*16^0 + 4*16^1 + 3*16^2 = 10+64+768 = 842
2、⼗进制转其他进制
2.1、⼗进制转⼆进制binary
规则:将该数不断除以2,直到商为0为⽌,然后将每步得到的余数倒过来,就是对应的⼆进制,故此法叫做除商逆序取余法;
案例:将56转换为⼆进制
56 :
56 / 2 = 28 余0
28 / 2 = 14 余0
14 / 2 = 7 余0
7 / 2 = 3 余1
3 / 2 = 1 余1
1 /
2 = 0余 1
故56转换为⼆进制的结果是:111000
代码实现:
#include <stdio.h>
//转⼗进制⼆进制
void main() {
printf("请输⼊⼀个⼗进制数:");
int binary = 0; //⼆进制数
int b = 1; //循环标志
int num[100] ; //⽤来存⼆进制的数组
int index = 0; //数组的下标
int count = -1; //⽤来计算数组的使⽤个数,这⾥使⽤-1是因为数组的下标是从0开始的
//所以当我们循环⼀次去⾃增的时候,第⼀次应该是从0开始,如果count的初始值是0的话
//就会导致使⽤的第⼀个数组的下标为1,那样会导致存数据的下标index和记录使⽤的下标count不⼀致
//使数据溢出
scanf("%d",&binary);
while (b) {
num[index] = binary % 2; //每次运算取余
binary /= 2; //每次运算⼆进制数需要除以2
//printf("num[%d]=%d\n",index,num[index]);
index++; //每循环⼀次数组下标就移⼀位
count++; //每循环⼀次就表⽰占⽤了数组的⼀个位置
if (binary == 0) {
b = 0;
}
}
printf("占⽤数组位置%d个",count+1);
printf("\n");
printf("⼆进制数为:");
for (int i = count; i >=0; i--) {
printf("%d",num[i]);
}
getchar();
getchar();//回车会被接收,所以需要两个来暂停控制台
}
2.2、⼗进制转⼋进制octonary
规则:将该数不断除以8,直到商为0,然后将每步得到的余数倒过来,就是对应的⼋进制。
**案例:**将156转换为⼋进制
156:
156 / 8 = 19 余 4
19 / 8 = 2 余 3
2 / 8 = 0 余 2
故156转换为⼋进制的结果是:0234
代码实现:
#include <stdio.h>
//⼗进制转⼋进制
#define TRUE 1 //宏定义 true为1
#define FALSE 0//宏定义 false为0
void main() {
int num[100]; //定义数组⽤来存储转换后的⼋进制数
int octonary = 0; //⼗进制数
int b = TRUE; //循环赋值的标志
int index = 0; //存储⼋进制位数的下标
int count = -1; //⼋进制数的位数
printf("请输⼊⼀个⼗进制数:");
scanf("%d",&octonary);
while (b) {
num[index++] = octonary % 8; //获取余数
octonary /= 8; //累除
count++;
if (octonary == 0) { //当octonary为0时,表⽰已经除完了,除到底了,这时候只需要将所得到的的余数
b = FALSE;  //倒过来就是需要求的⼋进制数了
}
}
printf("占⽤数组位置%d个\n",count+1);
printf("⼋进制数为:");
for (int i = count; i >= 0; i--) {
printf("%d",num[i]);
}
getchar();
getchar();
}
2.3、⼗进制转⼗六进制HEX(hexadecimal)
规则:将该数不断除以16,直到商为0,然后将每步得到的余数倒过来,就是对应的⼗六进制。案例:将356转换成⼗六进制
356:
356 / 16 = 22 余 4
22 / 16 = 1 余 6
1 / 16 = 0 余 1
故356转换为⼗六进制的结果为0x164
代码实现:
#include <stdio.h>
#include <stdbool.h>
//⼗进制转换为⼗六进制
void main() {
int hexadecimal = 0;
printf("请输⼊⼀个⼗进制数:");
scanf("%d",&hexadecimal);
bool b = true;
int index = 0;//数组的下标
int num[100];//⽤来存储转换后⼗六进制
while (b) {
num[index++] = hexadecimal % 16;
hexadecimal /= 16;
if (hexadecimal == 0) {
b = false;
}
}
printf("占⽤数组的位置%d个\n",index);
printf("转换后的⼗六进制数为:");
for (int i = index-1; i >= 0; i--) {
printf("%d",num[i]);
二进制转换十六进制算法}
getchar();
getchar();
}
3、⼆进制转其他进制
3.1、⼆进制转⼋进制
规则:从低位开始,将⼆进制数每三位⼀组(111表⽰7)分组,不够的⽤0补充,将每⼀组转换成对应的⼋进制即可案例:将11010101转成⼋进制
11010101:对其进⾏三位⼀体分组
第⼀组:101 ——>  5
第⼆组:010 ——>  2
第三组:011 ——>  3
故,⼆进制11010101对应的⼋进制数是:0325
3.2、⼆进制转⼗六进制
规则:从低位开始,将⼆进制数每四位⼀组(1111表⽰F)进⾏分组,转成对应的⼗六进制数即可
案例:将11010101转成⼗六进制
11010101:对其进⾏四位⼀体分组
第⼀组:0101 ——> 5
第⼆组:1101 ——> 13
故,⼆进制11010101转换为⼗六进制数是:0xD5
4、其他进制转⼆进制
4.1、⼋进制转⼆进制
规则:将⼋进制数的每⼀位,转换成对应的⼀个三位的⼆进制数即可
案例:将0237转成⼆进制
0237:每⼀位对应三位⼆进制数进⾏拆分
第⼀组 7 ——> 111
第⼆组 3 ——> 011
第三组 2 ——> 010
故,⼋进制数0237转换为⼆进制为:10011111
4.2、⼗六进制转⼆进制
规则:将⼗六进制数的每⼀位,转换成对应的⼀个四位的⼆进制数即可
案例:将0X23B转换成⼆进制数
0x23B:每⼀位对应四位⼆进制数进⾏拆分
第⼀组 B ——> 1011
第⼆组 3 ——> 0011
第三组 2 ——> 0010
故,0x23B转换为⼆进制数为:1000111011
总结
到此这篇关于C语⾔的进制转换及算法实现的⽂章就介绍到这了,更多相关C语⾔进制转换及算法内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。