本文主要介绍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的(digit -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 :
5/2=大于28 0
8/2=大于14 0
14/2=7大于0
7/2=3大于1
3/2=1剩余1
1/2=0大于1
因此,将56转换成二进制的结果是:111000
代码实现:
#包含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,会导致存储数据的下标索引与记录使用的下标计数不一致。
//溢出数据
scanf('%d ',二进制);
当(b) {
num[index]=二进制% 2;//取每个运算的余数
二进制/=2;//每次运算都需要将二进制数除以2
//printf('num[%d]=%d\n ',index,num[index]);
指数;//数组下标每循环一次就移位一位。
数数;//每次循环都意味着数组的一个位置被占用。
if (binary==0) {
b=0;
}
}
Printf(“占用%d个数组位置”,计数1);
printf(' \ n ');
Printf('二进制数是:');
for(int I=count;I=0;我- ) {
printf('%d ',num[I]);
}
getchar();
getchar();//Enter将被接收,所以需要两个来暂停控制台
}
2.2、十进制转八进制octonary
规则:将数除以8,直到商为0,然后将每一步得到的余数求逆,就是对应的八进制。
* *案例:* *将156转换为八进制
156:
16/8=大于19 4
9/8=2剩余3
2/8=0剩余2
因此,将156转换为八进制的结果是:0234
代码实现:
#包含stdio.h
//将十进制转换为八进制
#define TRUE 1 //宏定义TRUE为1
#define FALSE 0//宏将FALSE定义为0
void main() {
int num[100];//定义一个数组来存储转换后的八进制数。
int八进制=0;//十进制数
int b=TRUE//循环赋值标志
int index=0;//存储八位字节的下标
int count=-1;//八进制数的位数
Printf('请输入一个小数:');
scanf('%d ',八进制);
当(b) {
num[index ]=八进制% 8;//获取余数
八进制/=8;//累积除法
数数;
If(八进制==0) {//当八进制为0时,表示除法结束,除法结束。这个时候你只需要将余数除即可。
b=假;//反过来就是要求的八进制数。
}
}
Printf('占用%d个数组位置\n ',计数1);
Printf('八进制数为:');
for(int I=count;I=0;我- ) {
printf('%d ',num[I]);
}
getchar();
getchar();
}
2.3、十进制转十六进制HEX(hexadecimal)
规则:将数除以16,直到商为0,然后将每一步得到的余数反过来,就是对应的十六进制。
案例:将356转换为十六进制
356:
36/16=大于22 4
2/16=1剩余6
1/16=0大于1
所以356转换成十六进制的结果是0x164。
代码实现:
#包含stdio.h
#包含stdbool.h
//将十进制转换为十六进制
void main() {
int十六进制=0;
Printf('请输入一个小数:');
scanf('%d ',十六进制);
bool b=true
int index=0;//数组的下标
int num[100];//用于存储转换后的十六进制
当(b) {
num[index ]=十六进制% 16;
十六进制/=16;
if(十六进制==0) {
b=假;
}
}
Printf('占用数组的%d个位置\n ',index);
Printf('转换后的十六进制数为:');
for(int I=index-1;I=0;我- ) {
printf('%d ',num[I]);
}
getchar();
getchar();
}
3.从二进制到其他二进制的转换
3.1、二进制转八进制
规则:从低位开始,将二进制数分成三位数一组(111表示7),如果数不够,用0补充,然后将每组转换成对应的八进制。
案例:将11010101转换为八进制
1010101:三一集团。
第一组:101 —— 5
第二组:010 —— 2
第三组:011 —— 3
所以二进制11010101对应的八进制数是:0325。
3.2、二进制转十六进制
规则:从低位开始,将二进制数按四位数分组(1111表示F),转换成相应的十六进制数。
案例:将11010101转换为十六进制
1010101:把他们分成四组。
第一组:0101 —— 5
第二组:1101 —— 13
所以二进制11010101转换成十六进制数就是:0xD5。
4.从其他二进制到二进制的转换
4.1、八进制转二进制
规则:将八进制数的每一位转换成相应的三位数二进制数。
案例:将0237转换为二进制
0237:每一位对应一个三位二进制数进行拆分。
第一组7 —— 111
第二组3 —— 011
第三组2 —— 010
因此,八进制数0237转换为二进制数1001111。
4.2、十六进制到二进制
规则:将十六进制数的每一位转换成相应的四位二进制数。
案例:将0X23B转换为二进制数
0x23B:每一位对应一个四位二进制数进行拆分。
第一组B —— 1011
第二组3 —— 0011
第三组2 —— 0010
所以0x23B转换成二进制数:1000111011。
总结
关于C语言的十进制转换和算法实现的这篇文章到此为止。更多相关C语言的十进制转换和算法内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。