Java编译期时将十进制转为二进制,运算的时候二进制进行运算,输出的时候再通过方法以十进制来显示。
Integer.toBinaryString()//显示二进制数字的方法
十六进制
十六进制是用来缩小二进制的,从最低位开始,每四位二进制缩写一位十六进制。
0x 是十六进制字面量前缀,0x开头的数字会按照十六进制进行编译
此外,前缀0b表示二进制,前缀0表示8进制。
int a = 0xff//十六进制
int b = 0b111_1010_1111_0001//二进制
int c = 017//八进制
补码
粉红划线下面的为负数,上面的为正数或0。划线下面取除最低值-4外的任意值,比如-3,上面可以找到2,与之相加得-1;再比如-2,可以找到1,与之相加得-1。
设下面的为a,上面的为b,a,b互反的时候,有a+b=-1,化一下式子,-b=a+1,再化,-b=~b+1或
-a=~a+1。
byte
byte占1字节,能表示-128到127的数
即0b11111111_11111111_11111111_10000000至0b1111111的数
int占4字节,能表示0b10000000_00000000_00000000_00000000至0b01111111_11111111_11111111_11111111的数。
位运算
与运算:&
或运算:|
取反运算:~
右移位运算:>>>
数学右移位运算:>>
左移位运算:<<
与运算
逻辑乘法,有0得0
0&0=0
0&1=0
1&0=0
1&1=1
或运算
逻辑加法,有1则1
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
右移位运算
>>> 逻辑右移位,低位自动溢出,高位补0
数学右移位
>> 数学右移位,低位自动溢出,高位为1则补1,高位为0则补0。
右移动1位表示缩小2倍,比如a扩大2.5倍可以这样写:a=2*a+(a>>1)
右移动2位表示缩小4倍,
以此类推
左移位运算
左移位,整体向左移动,高位溢出,低位补0
左移动1位表示扩大2倍,比如a扩大2.5倍可以这样写:a=(a<<1)+(a>>1)
左移动2位表示扩大4倍,
以此类推
掩码
a = 01011100 11110000 01111000 10101111
b = 00000000 00000000 00000000 11111111
c = a&b= 00000000 00000000 00000000 10101111
将a的最后8位拆分,存储到c。
b为掩码。
整数编码
整数编码:将整数拆分为byte
int a = ?
int a1 = (a >>> 24) & 0xff;
int a2 = (a >>> 16) & 0xff;
int a3 = (a >>> 8) & 0xff;
int a4 = a & 0xff;
再将四个byte数据合成一个整数
int b = (a1<<24) | (a2<<16) | (a3<<8) | a4