使用8421码将二进制转换为十进制

学习进制转换对学习Java的底层源码有很大的帮助
例如HashMap中用到的的这个方法

public static int highestOneBit(int i) {
        // HD, Figure 3-1
        i |= (i >>  1);
        i |= (i >>  2);
        i |= (i >>  4);
        i |= (i >>  8);
        i |= (i >> 16);
        return i - (i >>> 1);
    }

如果不懂进制转换,那就无从下手了

十进制

首先来看一下最常见的十进制
十进制只有十个符号 : 0,1,2,3,4,5,6,7,8,9 最大的为 “9”
当要表达比 “9"大一位时,只能把"9” 变成"0",同时向左前进一位:
在这里插入图片描述
当数字很长时,比如824261231,我们通过单位来进行计算:
在这里插入图片描述

二进制转换十进制

复习了一遍十进制,就要学习一个新的概念了,叫做8421码,看图:
在这里插入图片描述
使用8421码对低位相乘 再相加,算为:
18+14+12+11
最后结果为15

如果高位有数字,像这样:
在这里插入图片描述
低位 0100 算为4,高位每次向左移动一位,翻一倍

在这里插入图片描述
0001 1111 对应为
000256 128 64 32 16
结果相加
4+16+32+64+128+256=500
最后得知 二进制
0001 1111 0100
转换为十进制等于
500

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值