您的位置:首页 > 编程语言 > Java开发

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)) ;
}
};




执行步骤如下:



运算符的优先级如下:



简洁表达式:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: