10进制整数转2,8,16进制

10进制转2,8,16进制


注:
1.笔者在这里只写了整数的进制间转换,小数尚未介绍,有兴趣的可自行查阅
2.这里用到的自定义函数思想在冒泡排序中以提及,不再加以介绍



1.十进制转二进制

十进制整数转换为二进制整数采用"除2取余,逆序排列"法。

一般用数字0,1表示
具体做法:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,
直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的
高位有效位,依次排列起来。
eg:176 =(10110000)
    176/2=88=====余0      0
    88/2=44======余0      0
    44/2=22=======余0     0  ↑  列
    22/2=11=======余0     0  |  排
    11/2=5========余1     1  |  序
    5/2=2=========余1     1  |  逆
    2/2=1=========余0     0
    1/2=0=========余1     1

2.十进制转八进制

十进制整数转换为八进制整数采用"除8取余,逆序排列"法。

一般用数字0~7表示
具体做法:用8整除十进制整数,可以得到一个商和余数;再用8去除商,又会得到一个商和余数,如此进行,
直到商为小于1时为止,然后把先得到的余数作为八进制数的低位有效位,后得到的余数作为八进制数的
高位有效位,依次排列起来。
注:八进制以0开头,例如十进制716 = 八进制01314。
eg: 716 =(01314)

    716/8=89=======余4    4  ↑  列
    89/8=11=======余1     1  |  排
    11/8=1========余3     3  |  序
    1/8=0=========余1     1  |  逆

3.十进制转十六进制

十进制整数转换为十六进制整数采用"除16取余,逆序排列"法。

一般用数字0~9和字母A~F(或a~f)表示,其中A~F表示10~15。
具体做法:用16整除十进制整数,可以得到一个商和余数;再用16去除商,又会得到一个商和余数,如此进行,
直到商为小于1时为止,然后把先得到的余数作为十六进制数的低位有效位,后得到的余数作为十六进制数的
高位有效位,依次排列起来。
注:十六进制以0X或0x开头,例如十进制3225 = 十六进制C99。
eg: 3225 =(C99)
                                      ↑  列
    3225/16=201=======余9          9  |  排
    201/16=12========余9           9  |  序
    12/16=0=========余12(C)        C  |  逆

4.无限循环程序代码

	while(1)
	{
		主体部分 
		printf("\n按回车键继续, 按Ctrl + C退出...\n");
		getchar(); 
		getchar(); 
	}

getchar()是用来吸收回车键的

5.代码实现

因为十进制转2,8,16的方式相似, 所以笔者在这里写了一个DevNtype函数,来优化代码。

include<stdio.h>
      //因为两个函数中用都用,且第一个函数得到的i要直接用到第二个函数中所以定义全局变量
int arr[10000] = {0}, i = 0;
      //因为16进制会用到字母,而2,8进制不会,所以直接写一个数组用来输出转换后的数
char numtype[17] = "0123456789ABCDEF"; 
int DecNtype(int n, int type)//n为十进制数字,type是要转换成的类型
{
	if(n == 1 && i == 0) arr[i] = 1;//因为1教特殊,所以单挑出来
		else
		{
			arr[i] = n % type;
			n = n / type;
			i++;
                              //用到递归,直到取余等于0才停止,否则重复执行这个函数
			n == 0 ? arr[i + 1] = 1 : DecNtype(n, type);
		}	
}

int main()
{
	int type, num, j = 0;
	while(1)
	{
		printf("Input the type of bin(2,8,16): ");//输入进制类型
		scanf("%d", &type);
		printf("Input a number: ");//输入十进制数字
		scanf("%d", &num);
		DecNtype(num, type);//调用函数做进制转换
		if(type == 8) printf("0");
		if(type == 16) printf("0X");
		for(j = i - 1; j >= 0; j--)//16,8,2进制直接倒序输出
		{
			printf("%c", numtype[arr[j]]);
		}
		i = 0;
		printf("\n按回车键继续, 按Ctrl + C退出...\n");
		getchar(); 
		getchar(); 
	}
	
	return 0;
} 
posted @ 2020-11-17 20:48  OctopusSS  阅读(713)  评论(1)    收藏  举报