二进制、八进制、十进制与十六进制的互相转换(含正整数和小数)

发布时间:2024年01月14日

1.进制

??其实2进制、8进制、10进制、16进制是数值的不同表示形式而已。

2进制:0,1,10?? ??????????????????????? 逢二进一
8进制:0,1,2,3,4,5,6,7,10??????????????? 逢八进一
10进制:0,1,2,3,4,5,6,7,8,9,10?????????????逢十进一
16进制:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10 ?? 逢十六进一

??因为16进制就是逢十六进一,但是我们只有0~9这十个数字,所以我们用A、B、C、D、E、F分别表示10、11、12、13、14、15。16进制中的字母不区分大小写。
??假设有一个数值17,你想表示十进制的17呢?还是想表示八进制的17呢?还是想表示十六进制的17呢?
??所以为了区分,我们通常这样:

若想表示成10进制,直接就是 17?? 读作 十七
若想表示成8进制,需要变成 017 ??读作 零一七?????? 0开头的数字会被当成八进制
若想表示成16进制,需要变成 0x17??读作 零x一七?????16进制前边加上0x标记

??在C语言中不同进制我们需要这样输入输出:

#include <stdio.h>

int main()
{
	int a = 17;     // 十进制
	int b = 017;    // 八进制
	int c = 070;    // 八进制
	int d = 0x17;   // 十六进制
	int e = 0x17a;   // 十六进制

	// %d输出十进制的整型数
	printf("十进制输出 a=%d\n", a);
	printf("十进制输出 b=%d\n", b);
	printf("十进制输出 c=%d\n", c);
	printf("十进制输出 d=%d\n", d);
	printf("十进制输出 e=%d\n\n", e);
	
	// %o输出八进制的整型数 (输出的数开头不带0)
	printf("八进制输出 a=%o\n", a);
	printf("八进制输出 b=%o\n", b);
	printf("八进制输出 c=%o\n", c);
	printf("八进制输出 d=%o\n", d);
	printf("八进制输出 e=%o\n\n", e);

	// %x输出十六进制的整型数 (输出的数开头不带0x)
	printf("十六进制输出 a=%x\n", a);
	printf("十六进制输出 b=%x\n", b);
	printf("十六进制输出 c=%x\n", c);
	printf("十六进制输出 d=%x\n", d);
	printf("十六进制输出 e=%x\n", e);

	return 0;
}

在这里插入图片描述


2.十进制转二进制、八进制、十六进制

??因为10进制是我们生活中常见的,所以我们从10进制讲起。

1.转二进制

(1)十进制整数转二进制

??第一种方法:短除法
在这里插入图片描述
??除2取余,直至商和余数都小于2,从后往前得到的数字序列即为结果。例如:十进制11转二进制,
在这里插入图片描述
??第二种方法:凑数法

??其实10进制的每?位是权重的,10进制的数字从右向左是个位、十位、百位…,分别每?位的权重是100,101,102…,比如十进制的123:
在这里插入图片描述
??2进制和10进制是类似的,只不过2进制的每?位的权重,从右向左是20,21,22…,比如2进制的1101。
在这里插入图片描述

??因为二进制位不是1就是0,所以我们可以挑选二进制位的权重值相加来凑成十进制的数值,把选中的二进制位写成1,未选中的二进制位写成0,最后组合起来。如果二进制位的权重值相加不够,则继续往左添加二进制位。
??通俗来说就是用 2n 把十进制的数凑出来。
在这里插入图片描述
(2)十进制小数转二进制

??第一种:就是用 2 -n 把十进制的小数凑出来。
在这里插入图片描述

??第二种:取小数部分乘以2,取整数部分,依次从左往右放在小数点后,直至小数点后为0 。
??其实就是小数部分连续乘以2,直至结果为 1.0 的时候停止。

在这里插入图片描述
??所以大于1(整数部分不是0,又有小数部分)的小数转换二进制的时候,整数部分连续除以2取余,余数倒排;小数部分连续乘以2取整,整数正排,最后两个部分合并在一起成为二进制小数就可以了。

2.转八进制

(1)十进制整数转八进制

??第一种:用短除法,除8取余,直至商和余数都小于8,从后往前得到的数字序列即为结果。在这里插入图片描述 ??第二种:间接法:
??先把十进制转为二进制(除2取余),然后再由二进制转为八进制(从右往左三位二进制一组,对应一位八进制,二进制不够三位的往右边补零)。
在这里插入图片描述
(2)十进制小数转八进制

??与转二进制类似,取小数部分乘以8,取整数部分,依次从左往右放在小数点后,直至小数点后为0 。
??其实就是小数部分连续乘以8,直至结果为整数的时候停止。
??所以十进制小数转八进制时,整数部分连续除以8取余,余数倒排;小数部分连续乘以8取整,整数正排,最后两个部分合并在一起成为八进制小数就可以了。
在这里插入图片描述

3.转十六进制

(1)十进制整数转十六进制

??第一种:用短除法,除16取余,直至商和余数都小于16,从后往前得到的数字序列即为结果。
在这里插入图片描述
??第二种:间接法:

??与转八进制类似,先把十进制转为二进制(除2取余),然后再由二进制转为十六进制(从右往左四位二进制为一组,对应一位十六进制,二进制不够四位的往右边补零)。这里不做解释了。

(2)十进制小数转十六进制

??与转二进制类似,取小数部分乘以16,取整数部分,依次从左往右放在小数点后,直至小数点后为0 。
??其实就是小数部分连续乘以16,直至结果为整数的时候停止。
??所以十进制小数转十六进制时,整数部分连续除以16取余,余数倒排;小数部分连续乘以16取整,整数正排,最后两个部分合并在一起成为十六进制小数就可以了。参考转八进制,这里也不做图了。


3.二进制转八进制、十进制、、十六进制

1.转十进制

(1)二进制整数转十进制

??2进制和10进制是类似的,只不过2进制整数的每?位的权重,从右向左是20,21,22…,二进制位乘以自己对应的权重值然后再相加起来的结果就是十进制。比如2进制的1101。
在这里插入图片描述
(2)二进制小数转十进制

??2进制整数部分的每?位的权重,从右向左是20,21,22…,
??2进制小数部分的每?位的权重,从左向右是2-1,2-2,2-3…,
在这里插入图片描述

2.转八进制

(1)二进制整数转八进制

??第一种:对照0~7每个数的二进制进行互相转换。

??合三为一:8进制的数字每一位是0~7的数字,把他们各自写成2进制,最多有3个2进制位就足够了,所以在2进制转8进制数的时候,从2进制位右边开始向左每3个2进制位换算成一个8进制位,不够3位的直接换算。
在这里插入图片描述

在这里插入图片描述

??第二种:421法

??421就是二进制最右边一位的权重值是1,右数第二位的权重值是2,右数第三位的权重值是4。
??二进制转到八进制时,每三位二进制对应转换为一个八进制。不够三位的右边补0 。
在这里插入图片描述
在这里插入图片描述

(2)二进制小数转八进制

??整数部分从左到右每三位为一组,不够三位的在前边补零,采用421法转为八进制,小数部分则是从左往右每三位为一组,不够三位的在后边补零。也是采用421法转为八进制。

在这里插入图片描述

3.转十六进制

(1)二进制整数转十六进制

??第一种:对照 0~f (15) 每个数的二进制进行互相转换。

??合四为一:16进制的每一位是0~15的数字,把他们各自写成2进制,最多有4个2进制位就足够了,所以在2进制转16进制数的时候,从2进制位右边开始向左每4个2进制位换算成一个16进制位,不够4位的直接换算。
在这里插入图片描述
在这里插入图片描述
??第二种:8421法

??与421法类似,就是二进制最右边一位的权重值是1,右数第二位的权重值是2,右数第三位的权重值是4,右数第四位的权是8。
??二进制转到十六进制时,每四位二进制对应转换为一个八进制。不够四位的右边补0 。
在这里插入图片描述
在这里插入图片描述

(2)二进制小数转十六进制

??整数部分从左到右每四位为一组,不够四位的在前边补零,采用8421法转为十六进制,小数部分则是从左往右每四位为一组,不够四位的在后边补零。与转八进制差不多。
在这里插入图片描述


4.八进制转二进制、十进制、、十六进制

1.转十进制

(1)八进制整数转十进制

??8进制整数的每?位的权重,从右向左是80,81,82…,八进制位乘以自己对应的权重值然后再相加起来的结果就是十进制。
在这里插入图片描述
(2)八进制小数转十进制

??8进制整数部分的每?位的权重,从右向左是80,81,82…,
??8进制小数部分的每?位的权重,从左向右是8-1,8-2,8-3…,
在这里插入图片描述

2.转二进制

(1)八进制整数转二进制

??第一种:间接法

??先把八进制整数转换为十进制,再用十进制转化为二进制。
在这里插入图片描述
??第二种:每位八进制位转为3位二进制位

??8进制的数值每一位都是0~7的数字,把他们各自写成2进制,最多有3个2进制位就足够了,对照着
0~7每个数的二进制,将每一位八进制转换成3位二进制,然后合并。
在这里插入图片描述
??也可以用421法凑数
??421就是二进制最右边一位的权重值是1,右数第二位的权重值是2,右数第三位的权重值是4。
在这里插入图片描述

(2)八进制小数转二进制

??对照0~7每个数的二进制,将整数部分和小数部分分别转换成二进制,然后合并。

在这里插入图片描述

3.转十六进制

(1)八进制整数转十六进制

??第一种:先将八进制转换成二进制,再将二进制转换成十六进制
在这里插入图片描述

??第二种:先将八进制转换成十进制,再将十进制转换成十六进制
在这里插入图片描述
(2)八进制小数转十六进制
??先将八进制小数转换成二进制,再将二进制转换成十六进制
在这里插入图片描述

5.十六进制转二进制、十进制、、八进制

1.转十进制

(1)十六进制整数转十进制

??16进制整数的每?位的权重,从右向左是160,161,162…,十六进制位乘以自己对应的权重值然后再相加起来的结果就是十进制。
在这里插入图片描述
(2)十六进制小数转十进制

??16进制整数部分的每?位的权重,从右向左是160,161,162…,
??16进制小数部分的每?位的权重,从左向右是16-1,16-2,16-3…,
在这里插入图片描述

2.转二进制

(1)十六进制整数转二进制

??第一种:每位十六进制位转为4位二进制位

??16进制数值的每一位都是 0~F(15)的数字,把他们各自写成2进制,最多有4个2进制位就足够了,对照
0~F(15)每个数的二进制,将每一位十六进制转换成4位二进制,然后合并。
在这里插入图片描述
??也可以用8421法凑数
??与421法类似,就是二进制最右边一位的权重值是1,右数第二位的权重值是2,右数第三位的权重值是4,右数第四位的权是8。
在这里插入图片描述

??第二种:间接法

??先把十六进制整数转换为十进制,再用十进制转化为二进制。
在这里插入图片描述
(2)十六进制小数转二进制
??十六进制小数转二进制,整数部分和小数部分,分别转为二进制,然后合并即可
在这里插入图片描述

3.转八进制

(1)十六进制整数转八进制

??第一种:先将十六进制转换成二进制,再将二进制转换成八进制
在这里插入图片描述
??第二种:先将十六进制转换成十进制,再将十进制转换成八进制
在这里插入图片描述

(2)十六进制小数转八进制
??先将十六进制小数转换成二进制,再将二进制转换成八进制
在这里插入图片描述
??以上就是二进制、八进制、十进制与十六进制的全部互相转换了,当然也有其他的进制转换和方法,这些只是比较常见的,谢谢观看。

文章来源:https://blog.csdn.net/JokerXian717/article/details/135559318
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。