首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA 位运算符跟位移运算符

2012-09-09 
JAVA 位运算符和位移运算符java位运算符包括 &(与)AND |(或)OR^(异或)XOR~(非)NOT位移运算符包括 (右移)

JAVA 位运算符和位移运算符

java位运算符包括
&(与)       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的二进制为011,5的二进制为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的二进制位011,5的二进制位101。或操作结果为111。转为10进制为7


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

   
       int a=(3^5);       System.out.println(a);       System.out.println(Integer.toBinaryString(3));        System.out.println(Integer.toBinaryString(5));     

   
    结果打印为
          6
       011
       101

    解析:3的二进制位011,5的二进制位101。或操作结果为110。转为10进制为6


~(非)
    运算规则:~1=0   ~0=1         
        即:对一个二进制数按位取反,即0变为1,1变为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));     

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

感谢楼主的详解,受益匪浅,谢谢

热点排行