在java中以0x开头的数表示十六进制(如0x1, 0xa), 其中以字母a~f表示10~15的数字
如:0xf表示十进制数15
在java中以0开头的数表示八进制(如012,03),
没有前缀的数才表示十进制数(如123,4)
16进制转化为10进制:
如:123: 3*16^0+2*16^1+1*16^2
对应位数乘以16的对应次方
一个例子:
变量a是一个64位有符号的整数,初始值用16进制表示为:0Xf000 0000 0000 0000 变量b是一个64位有符号的整数,初始值用16进制表示为:0X7FFF FFFF FFFF FFFF。则a-b的结果用10进制表示为多少?
解答: 遇到带FFFF的题可以考虑为其+1
a: 16进制: 0Xf000 0000 0000 0000
b: 16进制: 0X7FFF FFFF FFFF FFFF
f表示十进制数15.
0X7(15个F) + 1 = 0X8(15个0)
所以:0X7(15个F) = 0X8(15个0) - 1
a-b = 0Xf(15个0) - (0X8(15个0) - 1)
= 0Xf(15个0) - 0X8(15个0) + 1
= 0X7(15个0) + 1
= 0X7000 0000 0000 0000
将16进制转化为10进制:
0X7000 0000 0000 0000= 1*16^0+7*16^15
因为7*16^15= 7*2^(4*15)
= 1+ 7*2^60
=1+1*2^60+2*2^60+4*2^60
=1+2^60+2^61+2^62