java中的运算符

来源:互联网 发布:paparecipe正品软件 编辑:程序博客网 时间:2024/06/06 16:15




  如果运算符写在后面表示先使用变量之后再进行自增或自减的操作,如果写在前面则先进行自增或自减的操作。程序如下:

public class OperateDemo06{public static void main(String args[]){int a = 3 , b = 3 ;// 定义两个变量a和bint x = 6, y = 6 ;// 定义两个变量x和ySystem.out.println("a = " + a) ;System.out.println("\t a++ = " + (a++) + " , a = " + a) ;// 先计算后自增System.out.println("b = " + b) ;System.out.println("\t ++b = " + (++b) + " , b = " + b) ;// 先自增后计算System.out.println("x = " + x) ;System.out.println("\t x-- = " + (x--) + " , x = " + x) ;// 先计算后自减System.out.println("y = " + y) ;System.out.println("\t --y = " + (--y) + " , y = " + y) ;// 先自减后计算}};



不管是短路还是还是非短路,其基本的操作结果是一样的。

使用与操作的时候,要求前几个表达式的内容都要是true最终结果才是true,如果有一个是false,则最终结果就是false。&& 表示短路与,对于与&来说,要求所有的条件都判断,而如果使用短路与&& 如果第一个条件是false,则后面的条件都不再判断。

使用或操作的时候,要求前后几个表达式只要有一个true则最终结果就是true,如果全部是false,最终结果才是false。|| 表示短路或,对于或| 来说,要求所有的条件都判断,而如果使用短路或|| 只要第一个条件为false,则后面的条件都不再判断。代码如下:

public class OperateDemo09{public static void main(String args[]){int x = 10 / 0 ;// 定义变量System.out.println("x = " + x) ;}};

程序会报错。

public class OperateDemo10{public static void main(String args[]){if(10!=10&10/0==0){System.out.println("条件不满足") ;}}};

也会报错是因为会检查所有的判断。

public class OperateDemo11{public static void main(String args[]){if((10!=10)&&(10/0==0)){System.out.println("条件满足") ;}}};
不会报错是因为第一个条件不满足,后面的条件不会再判断,因此不会报错。

或| 和 短路或 || 

public class OperateDemo12{public static void main(String args[]){if(10==10|10/0==0){System.out.println("条件满足") ;}}};
会报错,是因为会检查所有的判断。

public class OperateDemo13{public static void main(String args[]){if(10==10||10/0==0){System.out.println("条件满足") ;}}};

则不会报错,因为第一个条件为true,后面的则不再进行判断。

经分析后发现,短路与和短路或才是最常用的。





对于异或操作,相同为0,不同为1.


代码如下:

public class OperateDemo15{public static void main(String args[]){int x = 3 ;// 3的二进制数据:00000000 00000000 00000000 00000011int y = 6 ;// 6的二进制数据:00000000 00000000 00000000 00000110System.out.println(x & y) ;//与:00000000 00000000 00000000 00000010System.out.println(x | y) ;//或:00000000 00000000 00000000 00000111System.out.println(x ^ y) ;//或:00000000 00000000 00000000 00000101}};


还可以通过~ 取反码  代码如下:

public class OperateDemo16{public static void main(String args[]){int x = -3 ;// 应该以补码的形式存在,补码 = 反码 + 1 System.out.println(~x) ;}};


负数的原码 = 二进制数(符号位为1)

负数的反码 = 符号位不变 其余位取反;

负数的补码 = 负数的反码 + 1;

负数取反操作 = 负数原码补码 +1;具体如下:


在Java中还提供了左移和右移操作:

左移操作<<是将运算数的二进制码整体左移指定数位,左移之后的空位使用0补充。

右移操作>> 是将运算数的二进制码整体右移,右移之后空出来的位置使用符号位填充。如果是正整数使用 0 填充,如果是负数使用1填充。

具体代码如下:

public class OperateDemo18{public static void main(String args[]){int x = 3 ;// 3的二进制数据:00000000 00000000 00000000 00000011int y = -3 ;// -3的二进制数据:11111111 11111111 11111111 11111101System.out.println(x + "右移2位之后的内容:" + (x>>2)) ;System.out.println(y + "右移2位之后的内容:" + (y>>2)) ;}};

具体操作是:若是负数则先转为补码再移位。若是正整数则直接移位。具体操作如下:

正数的左移操作:


正负数的右移操作:


以上的右移操作属于带符号位的右移操作,在Java中也提供了无符号的右移操作符 >>> 使用此运算符将以 0 填充空出来的位。

无符号右移示例如下:

public class OperateDemo19{public static void main(String args[]){int x = 3 ;// 3的二进制数据:00000000 00000000 00000000 00000011int y = -3 ;// -3的二进制数据:11111111 11111111 11111111 11111101System.out.println(x + "右移2位之后的内容:" + (x>>>2)) ;System.out.println(y + "右移2位之后的内容:" + (y>>>2)) ;}};



执行步骤如下:



运算符的优先级如下:


简洁表达式:









0 0
原创粉丝点击