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的(位数-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 :
 56 / 2 = 28 余0
 28 / 2 = 14 余0
 14 / 2 = 7 余0
 7 / 2 = 3 余1
 3 / 2 = 1 余1
 1 / 2 = 0余 1
 故56转换为二进制的结果是:111000

代码实现:

#include <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,那样会导致存数据的下标index和记录使用的下标count不一致
	//使数据溢出
	scanf("%d",&binary);
	while (b) {
		num[index] = binary % 2; //每次运算取余
		binary /= 2; //每次运算二进制数需要除以2
		//printf("num[%d]=%d\n",index,num[index]);
		index++; //每循环一次数组下标就移一位
		count++; //每循环一次就表示占用了数组的一个位置
		if (binary == 0) {
			b = 0;
		}
	}
	printf("占用数组位置%d个",count+1);
	printf("\n");
	printf("二进制数为:");
	for (int i = count; i >=0; i--) {
			printf("%d",num[i]);
	}
	getchar();
	getchar();//回车会被接收,所以需要两个来暂停控制台
}

2.2、十进制转八进制octonary

规则: 将该数不断除以8,直到商为0,然后将每步得到的余数倒过来,就是对应的八进制。

**案例:**将156转换为八进制

156:
 156 / 8 = 19 余 4
 19 / 8 = 2 余 3
 2 / 8 = 0 余 2
 故156转换为八进制的结果是:0234

代码实现:

#include <stdio.h>
//十进制转八进制
#define TRUE 1 //宏定义 true为1
#define FALSE 0//宏定义 false为0
void main() {
	int num[100]; //定义数组用来存储转换后的八进制数
	int octonary = 0; //十进制数
	int b = TRUE; //循环赋值的标志
	int index = 0; //存储八进制位数的下标
	int count = -1; //八进制数的位数
	printf("请输入一个十进制数:");
	scanf("%d",&octonary);
	while (b) {
		num[index++] = octonary % 8; //获取余数
		octonary /= 8; //累除
		count++;
		if (octonary == 0) { //当octonary为0时,表示已经除完了,除到底了,这时候只需要将所得到的的余数
			b = FALSE;		//倒过来就是需要求的八进制数了
		}
	}
	printf("占用数组位置%d个\n",count+1);
	printf("八进制数为:");
	for (int i = count; i >= 0; i--) {
		printf("%d",num[i]);
	}

	getchar();
	getchar();

}

2.3、十进制转十六进制HEX(hexadecimal)

规则: 将该数不断除以16,直到商为0,然后将每步得到的余数倒过来,就是对应的十六进制。

案例: 将356转换成十六进制

356:
 356 / 16 = 22 余 4
 22 / 16 = 1 余 6
 1 / 16 = 0 余 1
 故356转换为十六进制的结果为0x164

代码实现:

#include <stdio.h>
#include <stdbool.h>
//十进制转换为十六进制
void main() {
	int hexadecimal = 0;
	printf("请输入一个十进制数:");
	scanf("%d",&hexadecimal);
	bool b = true;
	int index = 0;//数组的下标
	int num[100];//用来存储转换后十六进制
	while (b) {
		num[index++] = hexadecimal % 16;
		hexadecimal /= 16;
		if (hexadecimal == 0) {
			b = false;
		}
	}
	printf("占用数组的位置%d个\n",index);
	printf("转换后的十六进制数为:");
	for (int i = index-1; i >= 0; i--) {
		printf("%d",num[i]);
	}
	getchar();
	getchar();
}

3、二进制转其他进制

3.1、二进制转八进制

规则: 从低位开始,将二进制数每三位一组(111表示7)分组,不够的用0补充,将每一组转换成对应的八进制即可

案例: 将11010101转成八进制

11010101:对其进行三位一体分组
 第一组:101 ——>  5
 第二组:010 ——>  2
 第三组:011 ——>  3
 故,二进制11010101对应的八进制数是:0325

3.2、二进制转十六进制

规则: 从低位开始,将二进制数每四位一组(1111表示F)进行分组,转成对应的十六进制数即可

案例: 将11010101转成十六进制

11010101:对其进行四位一体分组
 第一组:0101 ——> 5
 第二组:1101 ——> 13
 故,二进制11010101转换为十六进制数是:0xD5

4、其他进制转二进制

4.1、八进制转二进制

规则: 将八进制数的每一位,转换成对应的一个三位的二进制数即可

案例: 将0237转成二进制

0237:每一位对应三位二进制数进行拆分
 第一组 7 ——> 111
 第二组 3 ——> 011
 第三组 2 ——> 010
 故,八进制数0237转换为二进制为:10011111

4.2、十六进制转二进制

规则: 将十六进制数的每一位,转换成对应的一个四位的二进制数即可

案例: 将0X23B转换成二进制数

0x23B:每一位对应四位二进制数进行拆分
 第一组 B ——> 1011
 第二组 3 ——> 0011
 第三组 2 ——> 0010
 故,0x23B转换为二进制数为:1000111011

总结

到此这篇关于C语言的进制转换及算法实现的文章就介绍到这了,更多相关C语言进制转换及算法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 编写C语言程序进行进制转换的问题实例

    题目 题目描述:      将M进制的数X转换为N进制的数输出.      输入:      输入的第一行包括两个整数:M和N(2<=M,N<=36).      下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出.      输出:      输出X的N进制表示的数.      样例输入:      16 10      F      样例输出:      15      提示:      输入时字母部分为大写,输出时为小写,并且有大数据. 思路 大整数乘法

  • C语言数据结构中数制转换实例代码

    C语言数据结构中数制转换实例代码 数制转换是严蔚敏的数据结构那本书中的例子,但是那本书中的例子大都是用伪代码的形式写的,不是很容易理解和实现,对初学者造成了不小的困扰,在这里我们将其详尽的实现出来,以便初学者调试和运行,并从中有所收获. #include <stdlib.h> #include <stdio.h> #include<malloc.h> #define STACK_INIT_SIZE 10 //定义最初申请的内存的大小 #define STACK_INCR

  • C语言中自动隐式转换与类型强制转换实例分析

    本文通过一个C程序实例对C语言中自动隐式转换与类型强制转换的注意点进行深入分析,详情如下: 先看一个C程序: #include<stdlib.h> #include<stdio.h> #include<conio.h> double proc(int q){ int n; double sum,t;//本例的关键就在这几个变量的类型上 sum = 2.0; while(sum<=q){ t=sum; //sum = sum+(n+1)/n;//自动隐式转换 sum

  • C语言进制转换代码分享

    代码很简单,功能也很简单,这里就不多废话了 #include<stdio.h> int main() { char ku[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int zh[32],i=0,w,j; long int b,y; printf("请输入一个十进制数,我能帮您把它转换成2~16任意进制数:\n"); scanf("%d",&y);

  • C语言将24小时制转换为12小时制的方法

    本文实例讲述了C语言将24小时制转换为12小时制的方法.分享给大家供大家参考.具体实现方法如下: /* * 24小时制转换为12小时制 */ #include <stdio.h> int main() { int n, m; printf("Enter a 24-hour time:"); scanf_s("%d:%d",&n,&m); if (n < 0) { printf("Error1!\n"); syst

  • C语言实现进制转换函数的实例详解

    C语言实现进制转换函数的实例详解 前言: 写一个二进制,八进制,十六进制转换为十进制的函数 要求: 函数有两个参数,参数(1)是要转换为十进制的进制数,参数(2)是标示参数(1)是什么进制(2,8,16标示二进制,八进制,十六进制). 要有报错信息,比如参数是1012,但参数(2)是2,显然是进制数表示有错误. 系统表 pg_proc 存储关于函数的信息 内部函数在编译之前需要先定义在 pg_proc.h 中,src/include/catalog/pg_proc.h CATALOG(pg_pr

  • C语言用栈实现十进制转换为二进制的方法示例

    本文实例讲述了C语言用栈实现十进制转换为二进制的方法.分享给大家供大家参考,具体如下: #include<stdio.h> #include<malloc.h> #include<math.h> #include<string.h> #include "process.h" #define SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define ERROR 0 #define TRU

  • c语言实现24小时制转换为12小时制示例

    分别用三个函数:输入(time_input).输出(time_output).转换(time_change)函数 复制代码 代码如下: #include<iostream>#include<cstdlib>using namespace std;void time_input(int& hour,int& minute);void time_output(int& hour,int& minte,char& noon);void time_c

  • 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的(位数-1)次方,然后求和,例如: 八进制 0123 = 3*8^0 + 2*8^1 + 1*8^2 = 3+16+64 = 83 1.3.十六进制转十进制

  • Python和C语言利用栈分别实现进制转换

    目录 问题描述 C语言实现 Python实现 问题描述 利用栈的数据结构实现将十进制数转换成二进制数 C语言实现 顺序表的存储结构实现栈 代码: #include <stdlib.h> #include <stdio.h> #define STACK_INIT_SIZE 100 //栈初始开辟空间大小 #define STACK_INCREMENT 10 //栈追加空间大小 //栈的结构体 typedef struct stack{ int *base; int *top; int

  • Java实现的进制转换工具类完整示例

    本文实例讲述了Java实现的进制转换工具类.分享给大家供大家参考,具体如下: import java.nio.charset.Charset; /** * 十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制,一般用数字0到9和字母A到F表示(其中:A~F即10~15).<br> * 例如十进制数57,在二进制写作111001,在16进制写作39.<br> * 像java,c这样的语言为了区分十六进制和十进制数值,会在十六进制数的前面加上 0x,比如0x20是十进制的

  • C++面试题之进制转换的实例

    C++进制转换的实例 一个面试题,要求输入十进制数,输出十六进制,可以使用printf打印%d,%c,%s来输出,但不能使用 %x 打印. 写了两种算法,还算比较简洁,粘贴在此. // 第一种算法,从低位到高位扫描移位,需要一个数组辅助倒序,一次性输出结果 #include <stdio.h> #define MAX_HEX_NUM 16 #define OUT_DATA_LEN sizeof(int)*2 // 2个16进制数表示1个字节 static char Hex_Char_Table

  • java 进制转换实例详解

    java 进制转换实例详解 十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinaryString(int i) 十六进制转成十进制 Integer.valueOf("FFFF",16).toString() 八进制转成十进制 Integer.valueOf("876",8).toString() 二进制转十进制 Integ

  • javascript常见数字进制转换实例分析

    本文实例讲述了javascript常见数字进制转换的方法.分享给大家供大家参考,具体如下: 基本思路是先把其他进制的转化成 十进制,然后再转化.这个过程是利用parseInt函数,例如把一个16进制的数字(num)转化成10进制,num = parseInt(num,16). 如果再想把它转化成二进制的,就是如下:num.toString(2) . 这其中关于16进制的一个函数也很特别,escape函数可以将一个字符串转化成16进制的数字. 下面是一个综合的例子: var a = escape(

  • php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码

    十进制转换为二进制.八进制.十六进制 从十进制向其它进制转换,用的是就用该数字不断除以要转换的进制数,读取余数.连接一起就可以了. 复制代码 代码如下: <?php /** *十进制转二进制.八进制.十六进制 不足位数前面补零* * * @param array $datalist 传入数据array(100,123,130) * @param int $bin 转换的进制可以是:2,8,16 * @return array 返回数据 array() 返回没有数据转换的格式 * @copyrig

  • php实现36进制与10进制转换功能示例

    本文实例讲述了php实现36进制与10进制转换功能.分享给大家供大家参考,具体如下: /** * @desc im:十进制数转换成三十六机制数 * @param (int)$num 十进制数 * return 返回:三十六进制数 */ function get_char($num) { $num = intval($num); if ($num <= 0) return false; $charArr = array("0","1","2"

  • javascript简单进制转换实现方法

    本文实例讲述了javascript简单进制转换实现方法.分享给大家供大家参考,具体如下: JavaScript下的进制转换非常方便,系统已经提供内置方法,提供2-36进制间的转型.直接提供表示的有8进制.10进制.16进制. var w=function(s){document.write('<br>'+s)}; //十进制转其他 var x=110; w(x); w(x.toString(8)); w(x.toString(32)); w(x.toString(16)); //其他转十进制

随机推荐