java中的运算符




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

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



执行步骤如下:



运算符的优先级如下:


简洁表达式:









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值