java 运算符

 运算符分类

         运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。运算符按照其要求的操作数数目来分,可以有单目运算、双目运算符和三目运算符。运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。

   算数

     单目运算  +(取正)-(取负) ++(自增) - -(自减)

     双目运算  +   -  ×   /  % 取模

     三目运算  :a>b  ? true : false  当a>b时返回true 否则返回false

   关系

     等于符号:==,不等于符号:!= ,大于符号:>, 小于符号:<,大于等于符号:>= ,小于等于符号:<= 

    位与逻辑

          位运算符     与(&)、非(~)、或(|)、异或(^)

     赋值运算

            =    +=     -=    *=    /=    %=    &=   ^=    |=   <<=    >>=

     位移 只能处理正整数运算符,char、short、byte在进行位移运算时都将会转换成int类型,运算结果也是int类型

     << 带符号左移 >>带符号右移 >>> 无符号右移 

 运算符演示

      与 ( & )   当 & 的两边是数字时进行按位运算,当 & 的两边是boolean时执行逻辑判断。

     &  和 && 的区别 

  int a =1 , b = 2 ,c = 3;
  a  == b  &&  b == c   //当a != b 时 直接返回 false 不进行b== c 判断
  a == b  &  b == c   //当a!=b时 还要进行b ==c 的判断

     &  进行数字运算

     3&6  = 2

     0011   // 3的二进制结果

     0110   // 6的二进制结果

     0010   // 计算结果 当上下两位同时为1时结果为1

     或(|)   当 | 的两边是数字时进行按位运算,当 | 的两边是boolean时执行逻辑判断。 | 和 || 的区别同上

     | 进行数字运算

      3|6  = 7

     0011   // 3的二进制结果

     0110   // 6的二进制结果

     0111  // 计算结果 当上下两位有一位为1 结果为1

    非(~)   ~3  = -4   

     0000  0011   // 3的二进制结果

     1111  1100  // 取反 如果为0结果为1 如果为1结果为0 

     0000  0100  //高位等于1所以原码等于负数,负数取反高位不变在末尾加1

    异(^)   

     6^3  =  5

     0011   // 3的二进制结果

     0110   // 6的二进制结果

     0101  // 计算结果 相同结果为0 不同结果为1   

     << 带符号左移     

     3 << 2  = 12 

     0011   // 3的二进制结果 

     1100   //向右移动两位后结果

     << 带符号右移

     3 >> 2 == 0

     0011   // 3的二进制结果 

     0000   //向右移动两位后结果

  整数的位移比较简单,下面咋们看一下负数的位移。负数在进行位移前,对其进行按位取反,取反后在进行位移操作。  负数位移的秘籍:负数位移时先将2进制码取反加一,然后进行位移,符号位不变,左移则其后补零,右移则其前补1,然后按位取反加一。 整数取反就是其本身,负数取反符号位不变,其余书进行取反

    -3  >> 2  = -1

    1000 0011  // -3的二进制原码

    1111 1101  // -3的二进制反码 加一

    1111 1111   //  移位后结果  符号位不变 向右移其前补1

    1000 0001  //负数取反 符号位不变,加一后二进制码, 

    -3  >>> 2 = 1073741823  无符号位移  

    1000 0000 0000 0000 0000 0000 0000 0011  //-3 的四字节二进制原码

    1111  1111  1111  1111  1111 1111  1111 1101  //-3 的二进制反码

    0011 1111  1111  1111  1111 1111  1111 1111   //无符号位移后肯定是整数,所以不需要进行转码,直接转换为10 进制,结果为  1073741823

  

    a+b 和  a+=b 的区别

 short a = 4 ;
 int  b = 5;
 a+=b  ; //可以成功编译,在进行计算时会自动进行高精度类型转换
 a= a+b ; //类型不一致,会报错

    

    

猜你喜欢

转载自lianpeng0011.iteye.com/blog/2400692