扫盲

一个关于byte数组的解析:

因为是String类型
图形a对应的的十进制是97,二进制是0110 0001

图形1对应的的十进制是49,二进制是0011 0001

图形2对应的的十进制是50,二进制是0011 0010

图形3对应的的十进制是51,二进制是0011 0011

图形4对应的的十进制是52,二进制是0011 0100

图形c对应的的十进制是99,二进制是0110 0011

buffer.get():读取一个字节,是0110 0001,对应97,读取后,buffer的position后移一位

buffer.getShort():读取两个字节,是读取到图形1、2,为二进制:0011 0001 0011 0010,转换成十进制是:2的13次方+2的12次方+2的8次方+2的5次方+2的4次方+2=12594

 

一个关于ByteBuffer解析:

扫盲_第1张图片

buffer.putShort((short) 1):因为short是两个字节,当前buffer是:00000000 00000001
buffer.putInt(2):因为int是四个字节,当前buffer是:00000000 00000001 00000000 00000000 00000000 00000010
以此类推
buffer.get()从buffer读取一个字节,即8位,00000000=十进制0,
读取后,当前buffer是:00000001  00000000 00000000 00000000 00000010
buffer.getShort()从buffer读取两个字节,即16位,00000001 00000000=十进制2的8次方=256
以此类推

计算机里面的数据,很难读懂。

一道面试题:

变量a是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF
变量b是一个64位有符号的整数,初始值用16进制表示为:0x8000000000000000
则a+b的结果用10进制表示为多少:

答:a+b=0xFFFFFFFFFFFFFFFF,转换为二进制为:11111....111111(64位1),有符号数,第一位是符号位,1开头代表负数,计算机中负数以补码的形式保存,对于负数:将除符号位之外按位取反,末尾加1,即得到原码:11111....111111取反得到100....00000,加1,100....00001,即为10进制-1

 

你可能感兴趣的:(java面试题)