进制
十进制
权:1 10 100 1000
二进制:
权:1 2 4 8 16 32
JAVA表示:0b
十六进制:
权:1 16
JAVA表示:0x
补码
计算机中的一种解决负数(有符号数)问题的编码(用负数的时候,JAVA以补码进行工作)
以4位二进制为例讲解补码编码规则:
- 计算时候,超过四位时候自动溢出舍弃,保存四位数字
- 计算机补码规则:
(面试题:正数溢出一定是负数吗?错,如图,可能正数也可能是负数)
如上图,补码是一个环形编码
取反对称(最小值除外):取反加一,(-n=~n+1 )
例:2取反为-3,-3+1=-2 0取反为-1,-1+1=0
-8取反为7,7+1=8,故最小值除外
掩码:mask(面具)
移位
|或运算
0|0=0
0|1=1
1|1=1//有1则1
&于运算
0&0=0
0&1=0
1&1=1//有0则0
<<左移位(高位溢出,低位补0)
<<二进制左移一位扩大两倍
N*32-n<<5
n/2(n>=0)n>>1
区别:>>右移位和>>>的区别
1 >>称为数学右移,正数高位补0,负数高位补1
2 >>>称为逻辑右移位计算,无论正负高位都补0
3 >>运算是接近数学结果:除以2向小方向取整数