【问题1】今天用到了random.nextInt(Integer.MAX_VALUE)的时候,由了一个疑惑,MAX_VALUE到底是多少?
@Native public static final int MAX_VALUE = 0x7fffffff;
【思路】
0x7fffffff 中的【0x】表示这是个16进制数,这个之后的才是值。也就是【7fffffff 】才是16进制。
【问题2】接下来的问题就是如何将16进制转化成10进制。这个可以参考百度百科的【十六进制转换】。
方式一:16进制直接转化成10进制
写法一:为了便于理解,过程如下
第一位: f*16^0 = 15
第二位: f*16^1 = 15 *16=240
第三位: f*16^2 = 15 *16^2=3840
第四位: f*16^3 = 15 *16^3 =61440
第五位: f*16^4 = 15 *16^4 =983040
第六位: f*16^5 = 15 *16^5 =15728640
第七位: f*16^6 = 15 *16^6 =251658240
第八位: 7*16^7 = 1879048192
所以转换之后的十进制=15 +240 +3840 +61440 +983040+15728640+251658240+1879048192=2147483647
写法二:简便的写法
15*(16^0+16^1+16^2+16^3+16^4+16^5+16^6)+7*16^7 = 15*((16^7-16^0)/15)+7*16^7 = 16^7 * (1+7) - 1 = 2147483647
方式二:16进制先转化为2进制,然后2进制转为10进制
第一步:16进制先转化为2进制
第二步:2进制转为10进制
把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。大概意思就是:就是把一个有X位的二进制数,从右 往左数,每一位依次乘以2的0次方,2的1次方,2的2次方,一直乘到2的X-1次方,然后把这些次方的结果加起来即可 得到最终一个十进制数的结果
所以0111 1111 1111 1111 1111 1111 1111 1111的十进制是:
2^0+2^1+2^2+2^3+2^4+2^5+2^0+2^6……+2^30+0*2^31=(2^31-2^0) +0*2^31 = 2^31-1=2147483647.【也就是 2 的 31 次方 - 1】