java中的运算符
2016-03-13 16:43
567 查看
如果运算符写在后面表示先使用变量之后再进行自增或自减的操作,如果写在前面则先进行自增或自减的操作。程序如下:
public class OperateDemo06{ public static void main(String args[]){ int a = 3 , b = 3 ; // 定义两个变量a和b int x = 6, y = 6 ; // 定义两个变量x和y System.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 00000011 int y = 6 ; // 6的二进制数据: 00000000 00000000 00000000 00000110 System.out.println(x & y) ; //与: 00000000 00000000 00000000 00000010 System.out.println(x | y) ; //或: 00000000 00000000 00000000 00000111 System.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 00000011 int y = -3 ; // -3的二进制数据: 11111111 11111111 11111111 11111101 System.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 00000011 int y = -3 ; // -3的二进制数据: 11111111 11111111 11111111 11111101 System.out.println(x + "右移2位之后的内容:" + (x>>>2)) ; System.out.println(y + "右移2位之后的内容:" + (y>>>2)) ; } };
执行步骤如下:
运算符的优先级如下:
简洁表达式:
相关文章推荐
- java hashCode的介绍
- 20145325张梓靖 《Java程序设计》第2周学习总结
- java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)
- java重点基础 (转)
- 第一次的Java随笔
- spring基础-convert
- 在MyEclipse中复制web工程时要注意的事项
- JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要动静分离?
- 20145105 《Java程序设计》第2周学习总结
- java程序设计基础_陈国君版第五版_第十章习题
- Spring InitializingBean和init-method
- java连接mysql报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
- Java IO(三)
- 20145239杜文超 《Java程序设计》第2周学习总结
- JAVA类集学习笔记
- 使用JDK自带的工具将中文转换为ascii码
- JAVA设计模式(09):结构型-代理模式(Proxy)
- Java源码之ConcurrentHashMap
- java 容器类 collection 泛型
- Eclipse中10个最有用的快捷键组合