Java基础之运算符

Java中常用的运算符分为:

Java基础之运算符_第1张图片

1.算术运算符中着重说下"++"和"--":

    "++"和"--"在运算中分为前++(--)和后++(--);

    前++在运算中是本身先运算后在参与运算的,而后++不同,是本身在表达式中不参与运算的.

    前--在运算中是本身先运算后在参与运算的,而后--不同,是本身在表达式中不参与运算的.

2.逻辑运算符中着重说下"|","||"和"&&","&"在执行上的区别:

    逻辑运算符是对boolean类型的值进行运算的.

    "|":或,"||":短路或;遇true则true.

    "&":与,"&&":短路与;遇false则false.

    在日常开发中短路与和短路或是比较常用的,在运算中,"|",前后关系表达式都得进行运算判断,"||",而"||"的前面的关系表达式如果为true,后面就不用进行运算了.

3.赋值运算符中着重说下"=","+=",在表达式中赋值和默认强转的区别:

   byte b = 3;

   b+=1;这行代码直接进行了类型转换

   b= b + 1;而它必须进行向下转型b = b + (byte)1;

4.位运算符:

    是对(数值)二进制进行运算的

    ">>":位右移(左补,最高位补为1,就补1,最高位为0,就补0)

    "<<":位左移(右补0)

    ">>>":无符号右移(左补0)

    "^":位异或(相同则0,不同则1)

    "~":按位取反

    "|":位与(遇0则0)

    "&":位或(遇1则1)

5.三元表达式:

    (关系表达式)?true:false;

6.面试题:

 

public class OperatorDemo {
	/**
	 * 	面试题1:交换变量
	 * 	int x = 10;
		int y = 20;
	 */
	@Test
	public void demo_01() {
		int x = 10;
		int y = 20;
		int n;
		n = x;
		x = y;
		y = n;
		System.out.println(x);
		System.out.println(y);
	}
	@Test
	public void demo_02() {
		int x = 10;
		int y = 20;
		int n;
		n = x+y;
		x = n-x;
		y = n-y;
		System.out.println(x);
		System.out.println(y);
	}
	@Test
	public void demo_03() {
		int x = 10;
		int y = 20;
		x=(x+y)-(y=x);
		
		System.out.println(x);
		System.out.println(y);
	}
	@Test
	public void demo_04() {
		int x = 10;
		int y = 20;
		x = x^y;
		y = x^y;
		x = x^y;
		
		System.out.println(x);
		System.out.println(y);
	}
	/**
	 * 面试题2:
	 * 如何最有效率的算出数字8
	 */
	@Test
	public void demo_05() {
		System.out.println(2<<2);
	}
	@Test
	public void demo_06() {
		int a = 3;
		int b = 4;
		/**
		 * 位运算符  需要把数值转化成二进制进行运算
		 * 3
		 * 00000000 00000000 00000000 00000011
		 * 4
		 * 00000000 00000000 00000000 00000100
		 */
		System.out.println(a&b);
		/**  遇0则0
		 * 	00000000 00000000 00000000 00000000
		 * 
		 *   0
		 */
		System.out.println(a|b);
		/**  遇1则1
		 * 	00000000 00000000 00000000 00000111
		 * 
		 *   7
		 */
		System.out.println(a^b);
		/**  同0则1  特点:一个数据被另一个数据位异或两次  等于 它本身
		 * 	00000000 00000000 00000000 00000111
		 * 
		 *   7
		 */
		System.out.println(~a);
		/**  按位取反
		 * 	00000000 00000000 00000000 00000011
		 * 
		 *  11111111 11111111 11111111 11111100
		 *  11111111 11111111 11111111 11111011
		 *  10000000 00000000 00000000 00000100
		 *   -4
		 */
		
		System.out.println(a<<2);
		/** 左移   扩大2^2
		 * 3
		 *     00000000 00000000 00000000 00000011
		 * (00)000000 00000000 00000000 0000001100
		 * 
		 *   12
		 */
		System.out.println(a>>2);
		/** 右移  左边符号位为1,就补1,是0补0;缩小2^2
		 * 3
		 *     00000000 00000000 00000000 00000011
		 * 	   0000000000 00000000 00000000 000000(11)
		 * 0
		 */
		System.out.println(a>>>2);
		/** 无符号右移    左边永远补0
		 * 	3
		 *     00000000 00000000 00000000 00000011
		 * 	   0000000000 00000000 00000000 000000(11)
		 * 0
		 */
	}

}
@Test
	public void demo_01() {
		/**
		 * 使用三元运算符完成如下练习
			比较两个数是否相等
			获取两个数中最大值
			获取三个数中最大值
		 */
		int a =10;
		int b =20;
		int c =30;
		//比较两个数是否相等
		System.out.println((a==b)?true:false);
		//获取两个数中最大值
		System.out.println((a>b)?a:b);
		//获取三个数中最大值
		int temp = a>b?a:b;
		int max = temp>c?temp:c;
		System.out.println(max);
		int max2 = (a>b)?((a>c)?a:c):((b>c)?b:c);
		System.out.println(max2);
	}
	@Test
	public void demo_02() {
		int x = 1,y = 1;

		if(x++==2 & ++y==2)
		{
			x =7;
		}
		System.out.println("x="+x+",y="+y);
		//x = 2  y = 2
	}
	@Test
	public void demo_03() {
		int x = 1,y = 1;

		if(x++==2 && ++y==2)
		{
			x =7;
		}
		System.out.println("x="+x+",y="+y);
		//x = 2  y = 1
	}
	@Test
	public void demo_04() {
		int x = 1,y = 1;

		if(x++==1 | ++y==1)
		{
			x =7;
		}
		System.out.println("x="+x+",y="+y);
		//x = 7 y = 2
	}
	@Test
	public void demo_05() {
		int x = 1,y = 1;

		if(x++==1 || ++y==1)
		{
			x =7;
		}
		System.out.println("x="+x+",y="+y);
		// x = 7  y =1 ;
	}
	@Test
	public void demo_06() {
		boolean b = true;

		if(b==false) 
			System.out.println("a");
		else if(b)
			System.out.println("b");
		else if(!b)
			System.out.println("c");
		else
			System.out.println("d");
		//b
	}

 

 

 

 

 

你可能感兴趣的:(Java_SE)