学习进制转换对学习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