二进制、八进制、十进制、十六进制关系及转换

转自:https://blog.csdn.net/ruidianbaihuo/article/details/87797979

概念:

二进制是计算机唯一使用的进制,因为计算机的根本是电路,电路只能表示两种情况,一种情况为没有电,可以表示数字0,一种情况为有电,可以表示数字1,再无第三种情况。

计算机中使用的都是二进制,八进制和十六进制的出现其实都不是计算机的需要,它们的出现完全是出于表达和识别的方便性考虑的。一个较大的数用二进制表示就太长了,比如一个int类型的100(4个字节,总共32位),用二进制表示就是0000 0000 0000 0000 0000 0000 0110 0100,这还是一个比较小的数,如果更大,将会更复杂,写这么长,确实有些不便,于是,就出现了更简易的八进制,十进制,十六进制,数制越大,表示一个数所需的数码位数就越少,所以C和C++代码中不能直接输入二进制,但是允许输入八进制、十进制、十六进制。
那为什么没有出现什么七进制,九进制呢?因为8,16分别是2的3次方、4次方。使得这3种进制之间转换起来很方便。
八进制、十六进制即缩短了数的表示位数,同时保持了二进制数的表达特点。

表达方式:二进制:(010100101)B       八进制:(12565)O或者是(12565)Q           十进制:(2356)D          十六进制:(56BBA)H        
计算方式:

其他进制转成十进制: 

(2356)D        6 * 10^0+5 * 10^1+3 * 10^2+2 * 10^3=2356

(110)B          0 * 2^0+1 * 2^1+1 * 2^2=6

(2356)O      6 * 8^0+5 * 8^1+3 * 8^2+2 * 8^3=1262

十进制转成其他进制:

十进制转为二进制:(已48为例)

计算过程结果余数
48/2240
24/2120
12/260
6/230
3/211

用48除以进制基数2,直到结果为1(为什么说直到结果为1,因为不管任何数,按照上面的演算方式不断除以2,最后的结果一定是1),然后将结果的1放在最前面,后面依次写上每一步的余数,注意,这里每一步的余数是倒序(也就是从下往上排列),也就是说排在结果1后面的余数是计算过程3/2的余数,然后是计算过程6/2的的余数…所以最后得出十进制数48的二进制表示是110000。如果是byte类型,需要在前面补0,直至8位:0011 0000,如果是int类型就是:0000 0000 0000 0000 0000 0000 0011 0000。

十进制转为八进制:

十进制360转换为八进制表示:

计算过程结果余数
360/8450
45/855

结果5比进制基数8小,所以结果就是550。

十进制转换为十六进制:
十进制101转换位十六进制的表示:

计算过程结果余数
101/1665

结果为:65。

二、八、十六进制间的相互转换
二进制转换为八进制:

这里转换的时候是有技巧的,之前说过了,为什么是八进制、十六进制,而不是七进制,九进制,因为8=23,16=24。
所以二进制转换成八进制的时候,只需要将二进制的表示从右往左开始,每三位二进制数为1组 ,分到最后如果不足3位,那么剩下多少位就是多少位,再用每组的二进制的每一位数从右往左依次乘以2^02^12^2,然后相加,得出一组的结果,最后将所有组的结果相连,得出最终的结果(这里注意了,二进制转换为八进制的时候是分组了,并且最后是将每组的结果相连,而不是相加)。
这里,我具体举个例子:
二进制(0011 0101)B转换为八进制表示是什么结果:
首先,将二进制从右至左进行分组:
分别是 第一组:101 第二组:011 第三组:00。实际上,第三组没意义了,因为都是0,我们来关注前两组
第一组计算过程是:1 * 2^0+0 * 2^1+1 * 2^2=5;
第二组计算过程是:0 * 2^0+1 * 2^1+1 * 2^2=6;
所以最后的结果是65。也就是用6和5直接相连,而不是相加,这里还要注意一下相连的顺序问题,是6–5的方向。

二进制转换为十六进制
二进制转换为十六进制就是将二进制每四位二进制为一组,其他与八进制转换为二进制一样。


八进制转换为二进制
只需要将八进制的每一个数用三位二进制表示,然后相连既可以。比如(65)O:(6)O用二进制表示110、(5)O用二进制表示101 ,所以二进制为:(110101)B


十六进制转换为二进制
只要需要将十六进制的每一个数用四位二进制表示,然后相连即可。


八进制转换为十六进制
不要以为八和十六之间存在倍数2的关系就有什么捷径,实际上没有,需要通过二进制中转一下。
所以需要先将八进制转换成二进制,在转换成十六进制。
十六进制转换成八进制
需要将十六进制转换成二进制,再将二进制转换成八进制。

 

⑹、浮点数的表示与转换 –浮点数说白了就是我们常说的小数,只不过专业的叫法是"浮点数"。
上面说的都是有关二进制,八进制,十进制,十六进制整数之间的相互转换,现在我们来看一下这些进制的浮点数如何表示以及相互转换的(主要说明二、八、十六进制的浮点数如何转换成十进制的浮点数)。
相关进制的浮点数表示其实和整数的表示是一样的,比如二进制的浮点数表示:
这里我直接上示例了:
(0.1101)B就是表示这是一个二进制的浮点数。
(0.1101)O或者(0.1101)Q就是表示这是一个八进制的浮点数。
(0.1101)D就是表示这是一个十进制的浮点数。
(0.1101)H就是表示这是一个十六进制的浮点数。
那么二、八、十六进制的浮点数如何转换成十进制的浮点数呢?
这里我以二进制位例子详细说明,八进制和十六进制的转换方法与二进制是一样的,只是需要将对应的进制基数替换一下就行。
(0.1101)B这样的二进制浮点数转换成十进制的浮点数是多少呢?
转换的方式为:先提一个问题:为什么我这里举例是纯小数(整数部分为0),因为整数部分的转换和整数的转换是一样的,上面已经说明了,这里仅说明浮点数的转换。
需要将(0.1101)B转换为十进制的浮点数,首先从小数点右起第一位开始,这里的右起第一位是1,就用1 *2^{-1},第二位是1,继续用1 * 2^{-2},第三位是0,用0 * 2^{-3},第四位是1,用1 *2^{-4},没有第五位了,如果有,则继续按照以上逻辑以此类推,直到二进制的所有有效位数用完,然后将所有的结果全部相加,即得到了十进制的浮点数表示。
这里再清晰写一遍:
(0.1101)B转换为10进制的浮点数过程:
1 *2^{-1}+1 * 2^{-2}+0 * 2^{-3}+1 *2^{-4} = (0.6875)D。
这里需要特别注意的是:整数部分的转换幂指数是从0开始的,但是浮点数转换的幂指数是从-1开始的,这个非常的重要,并且位数和幂指数是对应的,第一位幂指数是-1,第二位幂指数是-2,第三位幂指数是-3…以此类推,最后将所有结果相加。
八进制浮点数转换为十进制浮点数只需要将进制基数变为8,十六进制浮点数转换为十进制浮点数只需要将进制基数变为16。如果不熟悉的码友可以自行用纸笔演练一遍,只是要牢记,需要替换上对应的进制基数。
实际上,浮点数的二进制、八进制、十进制、十六进制之间的相互转换可以分为两部分,小数点左边的整数部分转换与上文提到的整数转换完全一致,小数点右边的小数部分转换与上文提到的浮点数转换也完全一致(再次提醒,需要替换成对应的进制基数),所以一个浮点数的转换,可以分成整数部分的转换,小数部分的转换,再将转换结果通过小数点"."连起来就是最后的结果了。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值