• 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("
    按回车键继续, 按Ctrl + C退出...
    ");
    		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("
    按回车键继续, 按Ctrl + C退出...
    ");
    		getchar(); 
    		getchar(); 
    	}
    	
    	return 0;
    } 
    
  • 相关阅读:
    TP6|TP5.1 PHPoffice导出|导入
    centOS 7 环境搭建之安装 Redis
    centOS 7 环境搭建之安装 MySQL
    双向循环链表(DoubleLoopLinkList)
    双向链表(DoubleLinkList)
    可执行程序的编译过程
    C语言文件操作
    C语言跨平台时间操作计算时间差
    C语言线程安全问题
    C++类型双关
  • 原文地址:https://www.cnblogs.com/OctopuSS/p/13986898.html
Copyright © 2020-2023  润新知