位运算符和位移运算符

来源:互联网 发布:淘宝客服工作总结1 编辑:程序博客网 时间:2024/05/20 04:50

在java灵活的使用中,运用更底层的位运算和位移运算有助于提高运算效率。特别是在阅读源码的时候,很多底层代码都是通过基础运算符来实现的。

比如lucene中的一个示例:

if ( true ) {
      int pp = STORED | BINARY;
      if ( true )   {

            throw new RuntimeException("SchemaField: " + name + " conflicting stored field options:" + props);
      }
      p &= ~pp;
 }

位运算符: 

&(与)      AND 

|(或)      OR 

^(异或)    XOR 

~(非)      NOT 


位移运算符:

>>(右移) 

<<(左移)

>>>(右移,左边空出的位以0填充) 


位运算符用于位运算,那就只能对整型或者字符型进行运算。而除了~(非)是一元运算符之外其他的都为二元运算符。 
所有位运算都会把值转为二进制进行运算 

&
(与) 
 
运算规则:0&0=0  0&1=0  1&0=0   1&1=1 

 即:两位同时为1时,结果为1,否则为0 

int a=(3&5);  System.out.println(a);  System.out.println(Integer.toBinaryString(3));   System.out.println(Integer.toBinaryString(5)); 
结果:
1 
011 
101 
解析:3的二进制为0115的二进制为101,与操作结果为001。转为十进制是1


|(或) 
     
运算规则: 0|0=0   0|1=1  1|0=1   1|1=1 
      
即:参加运算的两个对象只要有一个为1,其结果就为1 

int a=(3|5);  System.out.println(a);  System.out.println(Integer.toBinaryString(3));   System.out.println(Integer.toBinaryString(5)); 
结果:
7 
011 
101 
解析:3的二进制位0115的二进制位101。或操作结果为111。转为10进制为7


 ^(异或) 
   
运算规则:0
^0=0  0^1=1   1^0=1   1^1=0 
     
即:参加运算的两个对象,如果两个个相应位为(值不同),则该位结果为1,否则为0 int a=(3^5);

int a=(3^5);  System.out.println(a);  System.out.println(Integer.toBinaryString(3));   System.out.println(Integer.toBinaryString(5)); 
结果:
6 
011 
101 
解析:3的二进制位0115的二进制位101。或操作结果为110。转为10进制为6 


~(非) 
   
运算规则:~1=0  ~0=1          
     
即:对一个二进制数按位取反,即0变为11变为0 ,~运算符的优先级比算数运算符、关系运算符、逻辑运算符和其他运算符都高 


<<(左移) 

   将一个运算符对象的各二进制位全部左移诺干位(左边的二进制位丢弃,右边补0 
    
操作数每左移一位,相当于该数乘以2

int a=(3<<2);  System.out.println(a);  System.out.println(Integer.toBinaryString(3));   System.out.println(Integer.toBinaryString(12)); 
结果:
12 
11 
1100 
解析:此运算符的意思就是把3的二进制位全部左移两位,右边补2个0。3的二进制位11,左移两位后,右边补2个0就是1100。1100转为10进制为12。 
说到底左移操作就相当于2的2次方×3。 每左移1位次方就增1 

>>(右移) 
将一个数的各二进制位全部右移诺干位,正数左补0,负数左补1,右边丢弃。 
操作数每右移一位,相当于该数除以2 
int a=(9>>1);  System.out.println(a);  System.out.println(Integer.toBinaryString(9));   System.out.println(Integer.toBinaryString(4));

结果:

1001 
100 
解析:9的二进制为1001,右移1位后,左正数补0,右边丢弃。结果为 0100。转为10进制后为4。










  


















0 0
原创粉丝点击