有符号数:---- ---- :高位:0代表正数 1代表负数
没有说代表:无符号数
负数 = 负数的绝对值按位取反+1
负数按位取反+1 =负数的绝对值
&和&&: 0&0=0 0&1=0 1&0=0 1&1=1
3&5=? 先把3和5以补码表示,再进行按位与运
3的补码: 00000011
5的补码: 00000101
所以:3&5=0000 0001=1
等比数列求和公式
Sn=a1.(qn-1)/(q-1) a1=1;q-1=1 q=2 简化为:Sn=2n-1
1111 1111:=2^8-1=255
1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2^1+1*2^0=
128+64+32+16+8+4+2+1=255
1.都可以表示逻辑与 的 运算符;区别->if(a0&b0) 要执行完括号 而 if(str!=null&&!str.equals("")) 有短路效果,当str为空时不执行&&后面的判断,从而避免NllPointerException
2.&用于获取整数的高四位或者低四位:
public static int getHeight4(byte data){//获取高四位
int height;
height = ((data & 0xf0) >> 4); f0(十六进制) = 11110000(二进制)
return height;
}
public static int getLow4(byte data){//获取低四位
int low;
low = (data & 0x0f);0f(十六进制) = 00001111(二进制)
return low;
}
>>:
右移,如果该数为正,则高位补0,若为负数,则高位补1;
>>>:
无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。
<< :
左移运算符,表示将exp1向左移动exp2位,在低位补0。其实,向左移动n位,就相当于乘以2^n。
左移没有<<<运算符
result = exp1 >> exp2;
result = exp2 >>> exp2;
表示把数exp1向右移动exp2位。
例如:
res = 20 >> 2;
20的二进制为 0001 0100,右移2位后为 0000 0101,则结果就为 res = 5;
res = -20 >> 2;
-20的二进制为其正数的补码加1在位移