一、基础知识
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 <stdio.h>
int main()
{
int i = 31;
printf("i = %d\n", i); // %d表示以十进制输出整型数据
printf("i = %o\n", i); // %o表示以八进制输出整型数据,注意这里是小写字母o
printf("i = %x\n", i); // %x表示以十六进制输出整型数据,如果数字中包含字母时,字母为小写
printf("i = %X\n", i); // %X表示以十六进制输出整型数据,如果数字中包含字母时,字母为大写
printf("i = %#x\n", i); // %o表示以十六进制输出整型数据,输出结果中带有0x
printf("i = %#X\n", i); // %o表示以十六进制输出整型数据,输出结果中带有0X
return 0;
}
二、十进制转为其它进制
示例一:将十进制数字185转为对应的二进制数字,用185不断除以2,每次保留余数,直至商为0,然后把保留的余数倒过来,得到的就是十进制数字185对应的二进制数字,如下图左侧部分所示。
示例二:将十进制数字185转为对应的八进制数字,用185不断除以8,每次保留余数,直至商为0,然后把保留的余数倒过来,得到的就是十进制数字185对应的八进制数字,如下图右上角部分所示。
示例三:将十进制数字3981转为对应的十六进制数字,用3981不断除以16,每次保留余数,直至商为0,然后把保留的余数倒过来,得到的就是十进制数字3981对应的十六进制数字,如下图右下角部分所示。
总结:十进制转n进制,除n取余,直至商为0,后将余数倒叙排列
三、任意进制转为十进制
以上述问题为依据,我们有理由推断:
所以,其它进制转换为十进制的方式便因此得出:
四、二进制与十六进制的互相转换
1.二进制转为十六进制
方法:从右向左,四位一段,不够补零,按十进制,分段转换
例如:
2.十六进制转为二进制
方法:将每一个十六进制位转换为四个二进制位
例如:
五、二进制与八进制的互相转换
1.二进制转为八进制
方法:从右向左,三位一段,不够补零,按十进制,分段转换
原理与二进制转为十六进制相同,这里不再举例说明
2.八进制转为二进制
方法:将每一个八进制位转换为三个二进制位
原理与十六进制转为二进制相同,这里不再举例说明
六、总结
学习完进制转化有助于学习计算机更底层的知识,它将为补码、汇编、调试等的学习打下坚实的基础。