代码改变世界

17_10_11 运算符&,&&,>> 和 >>>

2017-10-11 11:40  小歪1991  阅读(244)  评论(0编辑  收藏  举报

有符号数:---- ---- :高位: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在位移