基本语法_运算符
in Java with 0 comment

基本语法_运算符

in Java with 0 comment

第二章基本语法_运算符

运算符

分类

算数运算符

public class AriTest{
	public static void main(String[] args){
		//正、负、加、减、乘,不需要操作
		//除
		int a = 12;
		int b = 5;
		
		int result = a / b ;
		System.out.println(result);//2
		
		double result2 = a/b;
		System.out.println(result2);//2.0
		
		double result3 = a/(b+0.0);
		System.out.println(result3);//2.4
		
		double result4 = (double)a/b;
		System.out.println(result4);//2.4
		
		double result5 = (double)(a/b);
		System.out.println(result5);//2.0
		
		System.out.println("```````````````````````````````");
		
		//取余
		int m1 = 12;
		int m2 = 5;
		System.out.println(m1 % m2);//2
		
		int m11 = -12;
		int m22 = 5;
		System.out.println(m11 % m22);//-2
		
		int m111 = 12;
		int m222 = -5;
		System.out.println(m111 % m222);//2
		
		int m1111 = -12;
		int m2222 = -5;
		System.out.println(m1111 % m2222);//-2
		//总结,结果的符号与被模数的符号相同
		
		//前++
		int q1 = 10;
		int q2 = ++q1;
		System.out.println("q1 = " + q1 + ",q2 = " + q2);// 11   11
		//后++
		int h1 = 10;
		int h2 = h1++;
		System.out.println("h1 = " + h1 + ",h2 = " + h2);// 11   10
		
		//注意点:
		short s1 = 10;
		//s1 = s1 + 1;编译错误,不符合自动提升规则
		s1 = (short)(s1 +1);
		s1++;//正确,自增操作不会改变原本的数据类型。
		
		//小的问题
		byte b1 = 127;
		b1++;
		System.out.println(b1);//等于-128,原因是二进制截取后八位
		
		//--同理
	}
}

练习

练习:随意给一个整数,打印显示个位数、十位数、百位数

public class AriExer{
	public static void main(String[] args){
		int data = 267;
		int i0 = data%10;
		int i1 = data %100 /10;
		int i2 = data / 100;
		System.out.println("个位数:"+i0);
		System.out.println("十位数:"+i1);
		System.out.println("百位数:"+i2);
	}
}

赋值运算符

符号:=
扩展符号:+=、-=、*=、/=、%=
扩展符号不会改变变量本身的数据类型。

public class SetValues{
	public static void main(String[] args){
		//赋值运算
		int i = 10;
		
		//连续赋值
		int i1 = 1;
		int i2 = 2;
		i1 = i2 = 10;
		System.out.println(i1);
		System.out.println(i2);
		
		//另类写法
		int a = 10, b = 20;
		
		//+=
		int ss = 10;
		ss += 20;
		System.out.println(ss);
		
		//注意:
		short sah = 20;
		sah += 2;//发现可以编译通过,所以说扩展符号不会改变变量本身的数据类型
		System.out.println(sah);
		
		byte b1 = 127;
		b1 += 1;
		System.out.println(b1);// -128
	}
}

比较运算符

运算符运算
==相等于
!=不等于
<小于
>大于
<=小于等于
>=大于等于
instanceof检查是否是类的对象

结果都是boolean类型

public class CompareTest{
	public static void main(String[] args){
		int i = 10;
		int j = 20;
		System.out.println(i == j);//false
		System.out.println(i = j);//20
		
		boolean b1 = true;
		boolean b2 = false;
		System.out.println(b1 == b2);
		System.out.println(b1 = b2);
	}
}

逻辑运算符

运算符号示意运算符号示意
&逻辑与&&短路与
逻辑或丨丨短路或
!逻辑非^逻辑异或

只能适用于boolean类型的变量
结论:

public class LogicTest{
	public static void main(String[] args){
		//逻辑与 & 	&&
		/**
			相同点1:& &&运行结果都是相同的。
			相同点2:运算符左边都是true时,都会执行右边的内容。
			不同点:运算符左边是false是,&会执行右边,&&不会执行右边。
			推荐使用&&
		**/
		int m1 = 10;
		boolean b1 = false;
		if(b1 & (m1++ >0)){
			System.out.println("我在济南");
		}else{
			System.out.println("我在杭州");
		}
		System.out.println("m1 = " + m1);//11
		
		
		int m2 = 10;
		boolean b2 = false;
		if(b2 && (m2++ >0)){
			System.out.println("我在济南");
		}else{
			System.out.println("我在杭州");
		}
		System.out.println("m2 = " + m2);//10
		
		//逻辑或 |	||
		/**
			相同点1:|	||运算结果是相同的。
			相同点2:当运算符左边是false时,右边都会执行。
			不同点:当运算符左边是true是,|会执行右边,||不会执行右边。
			推荐使用||
		**/
		int m3 = 10;
		boolean b3 = true;
		if(b3 | (m3++ >0)){
			System.out.println("我在济南");
		}else{
			System.out.println("我在杭州");
		}
		System.out.println("m3 = " + m3);
		
		
		int m4 = 10;
		boolean b4 = true;
		if(b4 || (m4++ >0)){
			System.out.println("我在济南");
		}else{
			System.out.println("我在杭州");
		}
		System.out.println("m4 = " + m4);
	}
}

位运算符(了解)

运算符运算含义
<<左移空位补0,被移除的高位丢弃,空位补0
>>右移被移位的最高位是0,右移后补0;最高位是1,空位补1
>>>无符号右移被移位二进制最高位无论是1还是0,控缺位都补0
&与运算二进制位进行&运算
或运算二进制位进行|运算
^异或运算二进制位进行^运算
~取反运算二进制位进行取反运算

结论:

public class BitTest{
	public static void main(String[] args){
		System.out.println("21<<2:"+(21<<2));//84
		System.out.println("21<<3:"+(21<<3));//168
		System.out.println("21<<26:"+(21<<26));
		System.out.println("21<<27:"+(21<<27));//负的
	}
}

练习

交换两个变量的值

int n = 10;
int m = 20;
/*
位运算符题目
*/
public class BitExer{
	public static void main(String[] args){
		int n = 10;
		int m = 20;
		System.out.println("n = " + n + ",m = " + m);
		
		//方式1,临时存储
		//推荐使用方法一
		int temp = n;
		n = m;
		m = temp;
		System.out.println("n = " + n + ",m = " + m);
		
		//方式二,弊端:可能两数相加超出int值范围,局限性:只能用于数值类型
		n = n + m;
		m = n - m;
		n = n - m;
		System.out.println("n = " + n + ",m = " + m);
		
		//方式三,位运算符
		n = n ^ m;
		m = n ^ m;
		n = n ^ m;
		System.out.println("n = " + n + ",m = " + m);
	}
}

三元运算符

public class SanYuanTest{
	public static void main(String[] args){
		String a = 5<2?"1":"2";
		System.out.println(a);
	}
}

运算符的优先级

先运算的加小括号()

DAY03问题

  1. & 和 && 的异同点。
  1. 程序输出。

  2. 定义三个int类型变量并赋值,使用三元运算符或者if-else获取这个三个数中的较大数的实现。

public class LxTest{
	public static void main(String[] args){
		int n = 10;
		int m = 19;
		int s = 12;
		int max = (n>m)?((n>s)?n:s):((m>s)?m:s);
		System.out.println("较大的数为:"+ max);
	}
}
  1. 编写程序,声明2个double行变量并赋值,判断第一个数大于10.0,且第二个数小于20.0,打印两数之和。否则打印两数的乘积。
public class LxTest2{
	public static void main(String[] args){
		double d1 = 5.3;
		double d2 = 10.3;
		if(d1>10.0 && d2 < 20.0){
			System.out.println("两数之和:"+(d1 +  d2));
		}else{
			System.out.println("两数之积:"+(d1 *  d2));
		}
	}
}
  1. 交换两个值的代码的实现
public class LxTest3{
	public static void main(String[] args){
		int a = 10;
		int b = 20;
		//方式1
		int temp = a;
		a = b;
		b = temp;
		System.out.println("a="+a+",b="+b);
		
		//方式2
		a = a + b;
		b = a - b;
		a = a - b;
		System.out.println("a="+a+",b="+b);
		
		//方式3
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
		System.out.println("a="+a+",b="+b);
	}
}