概述
Java源码中涉及到大量的二进制操作,非常的复杂,但非常的快速。
Java二进制表示法
首先了解下二进制,二进制是相对十进制而言的,当然还有八进制,十六进制等等,我们常用的都是十进制,计算机用的都是二进制,而符号表示常用十六进制。
二进制就是只有0、1两个值表示的数,规则是逢二进一。
整数表示法
Java中使用补码来表示负数,具体就是除符号位之外,剩余位取反加1,符号位不变还是1(符号位0-正数,1-负数)
Java中二进制符号位也不是固定的,在Byte类型的数值中,由于其为一个字节即八位取值范围为-128到127,其符号位就是第8位二进制位。
如下所示:
Byte型数据
1 -> 0000 0001
-1 -> 1111 1111(计算:1为00000001,-1为10000001,取反为11111110,加1为11111111)
127 -> 0111 1111
-127 -> 1000 0001(计算:127为01111111,-127为11111111,取反为10000000,加1为10000001)
-128 -> 1000 0000(计算:128为100000000,取8位为00000000,-128为10000000,取反为11111111,加1为10000000)
Short型数为两个字节16位数值,其符号位为第16位:
Short型数据
1 -> 0000 0000 0000 0001
-1 -> 1111 1111 1111 1111(计算:1为0000000000000001,-1为1000000000000001,取反为1111111111111110,加1为1111111111111111)
32767 -> 0111 1111 1111 1111
-32767 -> 1000 0000 0000 0001(计算:32767为0111111111111111,-32767为1111111111111111,取反为1000000000000000,加1为1000000000000001)
-32768 -> 1000 0000 0000 0000(计算:32768为10000000000000000,取16位为0000000000000000,-32768为1000000000000000,取反为1111111111111111,加1为1000000000000000)
<