java位运算--基础(不按期更新)

        通常状况下,编写web应用可能不多接触到位运算场景,可是一旦编写偏底层的框架如hadoop ipc、lucene、数据压缩等位运算必须熟练掌握。java

一、按位取反(~)web

    将每一个位的值1变0,0变1。如byte val=1;   那么~val=-2。因为java采用补码,若是须要获得正数的负数就须要将正数按位取反再加1,能够验证-val=~val+1=-1。框架

二、按位异或(^)oop

    只有位的值不一样才等于1不然为0。如0000_0001^0000_0010=0000_0011。小技巧a ^ -1 ^ -1 =a,在zigzag编码中有实际应用。编码

三、按位与(&)ip

   只有位上值都为1时才等于1不然为0。 0&0=0;    1&1=1;    1&0=0;    0&1=0;hadoop

四、按位或(|)技巧

其中有一位数值为1结果等于1不然为0。1 | 0=1;0 | 1=1;0|0=0; 1| 1=1;lucene

五、移位运算数据

无论是左移、右移、仍是无符号右移,对于移动的位数超过32或者64时,都是对32或者64取余后的数进行移位的。右移至关于做除法运算不会改变运算符号,正数右移到最后会变成0,负数右移到最后会变成-1。无符号右移对于负数而言就不一样了,由于它始终在最前面补0,那么负数最后会变成正数,移到最后也会变成0。

相关文章
相关标签/搜索