文章目录

  • 一、基础知识
    • 1.C语言中的进制
    • 2.汇编中的进制
    • 3.常见进制的基数:
    • 4.不同进制的输出方式
  • 二、十进制转为其它进制
  • 三、任意进制转为十进制
  • 四、二进制与十六进制的互相转换
    • 1.二进制转为十六进制
    • 2.十六进制转为二进制
  • 五、二进制与八进制的互相转换
    • 1.二进制转为八进制
    • 2.八进制转为二进制
  • 六、总结

一、基础知识

1.C语言中的进制

C语言规定,在八进制数字前要加0(注意这里是数字零,不是大写字母O),在十六进制数字前要加0X或0x(注意这里同样是数字零,不是大写字母O),而在十进制数字前不需要加任何东西。

int i = 10; //表示十进制数字int j = 010; //表示八进制数字int k = 0x10; // 表示十六进制数字int l = 0X10; // 表示十六进制数字

2.汇编中的进制

汇编语言中,在数字后加字母B表示二进制数字,在数字后加字母O表示八进制数字,在数字后加字母D表示十进制数字,在数字后加字母H表示十六进制数字。

例如:
1011B表示二进制数字1011
1357O表示八进制数字1357
2049D表示十进制数字2049
3FB9H表示十六进制数字3FB9

3.常见进制的基数:

十进制:0 1 2 3 4 5 6 7 8 9
二进制:0 1
八进制:0 1 2 3 4 5 6 7
十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f(或0 1 2 3 4 5 6 7 8 9 A B C D E F)

4.不同进制的输出方式

#include int main(){int i = 31;printf("i = %d\n", i);// %d表示以十进制输出整型数据printf("i = %o\n", i);// %o表示以八进制输出整型数据,注意这里是小写字母oprintf("i = %x\n", i);// %x表示以十六进制输出整型数据,如果数字中包含字母时,字母为小写printf("i = %X\n", i);// %X表示以十六进制输出整型数据,如果数字中包含字母时,字母为大写printf("i = %#x\n", i); // %o表示以十六进制输出整型数据,输出结果中带有0xprintf("i = %#X\n", i); // %o表示以十六进制输出整型数据,输出结果中带有0Xreturn 0;}

二、十进制转为其它进制

  • 预备知识:在C语言中,小数字除以大数字,商为0,而余数就是小数字本身。例如,3/8 = 0,3%5 = 3;1/2 = 0,1%5 = 1;7/16 = 0,7%16 = 7

示例一:将十进制数字185转为对应的二进制数字,用185不断除以2,每次保留余数,直至商为0,然后把保留的余数倒过来,得到的就是十进制数字185对应的二进制数字,如下图左侧部分所示。

示例二:将十进制数字185转为对应的八进制数字,用185不断除以8,每次保留余数,直至商为0,然后把保留的余数倒过来,得到的就是十进制数字185对应的八进制数字,如下图右上角部分所示。

示例三:将十进制数字3981转为对应的十六进制数字,用3981不断除以16,每次保留余数,直至商为0,然后把保留的余数倒过来,得到的就是十进制数字3981对应的十六进制数字,如下图右下角部分所示。

总结:十进制转n进制,除n取余,直至商为0,后将余数倒叙排列

  • 练习
  • 将十进制数字123转换为对应的二进制数字
  • 将十进制数字123转换为对应的八进制数字,并通过编写程序检查是否正确
  • 将十进制数字10000转换为对应的十六进制数字,并通过编写程序检查是否正确

三、任意进制转为十进制

  • 思考:十进制数字1234是怎么得到的?


以上述问题为依据,我们有理由推断:

所以,其它进制转换为十进制的方式便因此得出:

四、二进制与十六进制的互相转换

  • 思考:1个十六进制位需要多少个二进制位来表示?
    因为1个十六进制位有16种不同的状态,而1个二进制位只有2种不同的状态,所以,需要4个二进制位进行排列组合才能拥有16种不同的状态。通俗地讲,1个十六进制位可以表达出16个不同的数字(0-15),而1个二进制位只能表达出2个不同的数字,所以需要4个二进制位才可以表达出16个不同的数字。例如,十六进制数字C对应的十进制数字是12,十进制数字12对应的二进制数字为1100。所以,1个十六进制位便对应4个二进制位,这在二进制与十六进制的互相转换过程中给我们提供了便利。

1.二进制转为十六进制

方法:从右向左,四位一段,不够补零,按十进制,分段转换

例如:

2.十六进制转为二进制

方法:将每一个十六进制位转换为四个二进制位

例如:

五、二进制与八进制的互相转换

  • 思考:1个八进制位需要多少个二进制位来表示?

1.二进制转为八进制

方法:从右向左,三位一段,不够补零,按十进制,分段转换
原理与二进制转为十六进制相同,这里不再举例说明

  • 练习
  • 将二进制数字11010转换为对应的八进制数字
  • 将二进制数字110110转换为对应的八进制数字
  • 将二进制数字0101110转换为对应的八进制数字

2.八进制转为二进制

方法:将每一个八进制位转换为三个二进制位
原理与十六进制转为二进制相同,这里不再举例说明

  • 练习
  • 将八进制数字27转换为对应的二进制数字
  • 将八进制数字34转换为对应的二进制数字
  • 将八进制数字321转换为对应的二进制数字

六、总结

学习完进制转化有助于学习计算机更底层的知识,它将为补码汇编调试等的学习打下坚实的基础。