08※、运算符的使用

运算符的使用

    --算术运算符   + - * /  %

            +的作用:实现加法运算,实现字符串的拼接

/**
  * @author Lantzrung
  * @date 2022年7月17日
  * @Description
  */

String res = 5+6+"abc";//Output: 11abc
String res1 = "abc"+5+6;//Output:abc56 cause:前面是String类型的字符串拼接,所以后面也是字符拼
//接,而不是加法运算了
String res2 = "abc"+5+6+7+8+9;//Output:abc56789;
int res3 = 8/0;//java.lang.ArithmeticException: / by zero  0不能作为被除数
int res4 = 8/0.2;//compile error:不兼容的类型,float类型无法转换成int类型
double res5 = 8%3.1;// 1.8--->1.7999999999998

    --扩展后的赋值运算符

08※、运算符的使用_第1张图片

    注意:扩展后的赋值运算符中包含强制类型转换操作

            item += 3;不完全等于item = item +3;

            而是等于item = (item的类型)(item +3);

/**
  * @author Lantzrung
  * @date 2022年7月17日
  * @Description
  */


int x = 3;
int y = 5;
x = x + y;//Output:8;
x += y;//Output:8; int x = (int) y;



这里插入一个经典笔试题:

short i = 0;//为什么 i += 5 可以? 而i =  i + 5出现错误;
i += 5;//cause:此运算赋值符包含强转类型,i = (short)(i+5);
i = i + 5;//compile error : 不兼容的类型: 从int类型转换short类型成可能会损失
System.out.println(i);

            

    --位运算符

08※、运算符的使用_第2张图片

/**
  * @author Lantzrung
  * @date 2022年7月17日
  * @Description
  */

//0000 0111  7
//0000 0101  7
//0000 0101  5
int res1 = 7&5;//按位与 全真(1)则为真(1)  有假(0)则为假(0)
//0000 0101  5
//0000 0001  1
//0000 0001  1
int res2 = 5&1;//Output:1 

//0000 0111  7
//0000 0101  5
//0000 0101  7
int res3 = 7&5;//按位或: 有真(1)则为真(1)  全假(0)则为假(0)

//0000 0101  5
//0000 0010  2
//0000 0111  7
int res4 = 5|2;//7

//0000 0101  5
※//1111 1010 -1-4-1=-6
int res5 = ~5; //Output:-6 取反,因为符号[将所有进行取反,包括符号位]

//0000 1010  10
※//1111 0101 -1-8-2=-11
int res6 = ~11; //Output:-11      

//0000 0111  7 
//0000 0101  5
//0000 0010  2
int res7 = 7^5;//2 按位异或 不同则为真(1) 相同则为假(0) 

//0000 0101  5
//0000 1110 14
//0000 1011 11
int res8 = 14^5;//11

//0000 0101  5
//0000 1010 10
int res9 = 5<<1;//10 左移一位 低位补0              

//1111 0101  -2-8=-10
//1110 1010  -16-4-1=-20
int res10 = -10<<1;//-20

//0000 0101  5
//0000 0010  2
int res10 = 5>>1;// 右移一位 高位补符号位

//1111 1010   -5
※//1111 1101   -1-2=-3//因为符号位是负数 故要补位-1 
int res11 = -5>>1;//-3 右移一位   

//1111 1111 1111 1111 1111 1111 1111 1011 (8*4=32bit)
//0111 1111 1111 1111 1111 1111 1111 1101  
int res12 = -5 >>> 1;//2

//1111 1111就是-1所以要-1

        --左移  双目运算符    案例 : 8向左移动一位,低位补0

        --有符号右移>>  高位补符号位

        --无符号右移>>> 高位补0

        笔试题:如何最快的实现2*8?  2<<3 唔姆这里详细过程我以后另外一下解释qwq

    --运算符的优先级(由高到低)

/**
  * @author Lantzrung
  * @date 2022年7月17日
  * @Description
  */

分隔符      .  []  ()  {}  ,  ;
单目运算符  ++ --  ~  !
强制类型转换运算符 (type)
乘法/除法/求余  *  /  %
加法/减法      +  -
移位运算符   <<  >>  >>>
关系运算符   <  <=  >=  >  instanceof
等价运算符  ==   !=
按位与    &
按位或    ^
条件与    &&
条件或    ||
三目运算符  ?:
赋值  =  += -= *= /= |= ^= %= <<=  >>=  >>>= 

    --比较运算符(短路和非短路的概念)

        >   <    >=    

    --逻辑运算符

08※、运算符的使用_第3张图片

--短路与 如果前面的表达式为假,则后面不需要在判断,直接短路

--短路或  前面为真,则直接短路,不执行后面的逻辑判断

/**
  * @author Lantzrung
  * @date 2022年7月17日
  * @Description
  */

//1、逻辑运算符
//与:全真(对)则为真,有假(错)则为假 
//必须都是true(1)真才返回true 否则返回false
if((3>2)&(4>2)) {}//真真 对对   运行通过
if((3>2)&(1>2)) {}//真假 对错 
if((1>2)&(0>2)) {}//假假 错错 
if((1>2)&(3>2)) {}//假真 错对 

//或:有真则为真,全假则为全假
//只要有一个是true(1)真就返回true 否则返回false
if((3>2)|(4>2)) {
}//真真 对对 
if((3>2)|(1>2)) {}//真假 对错  运行通过
if((1>2)|(0>2)) {}//假假 错错  运行通过
if((1>2)|(3>2)) {}//假真 错对  运行通过
		       
//短路和非短路的区别 非短路所有条件都要进行判断  

//短路与: 必须都为true时执行并返回true 否则返回false
//两个逻辑判断必须true时才会执行通过 否则都不执行
if((3>2)&&(4>2)) {}//真真 对对  运行通过
if((3>2)&&(1>2)) {}//真假 对错 
if((1>2)&&(0>2)) {}//假假 错错 
if((1>2)&&(3>2)) {}//假真 错对 
		
//短路或:有一个true时就可以返回true并执行不继续执行下一个方法条件,否则返回false  
//当都是false或者有一个false时 不会执行当前逻辑判断
if((3>2)||(4>2)) {}//真真 对对  运行通过
if((3>2)||(1>2)) {}//真假 对错  运行通过 前者执行   后者不执行
if((1>2)||(0>2)) {}//假假 错错 
if((1>2)||(3>2)) {}//假真 错对  运行通过 前者不执行 后者执行

--三目运算符(三个操作元素,相当于判断语句)

      (逻辑表达式)?数值1:数值2  

      如果表达式为真 则赋值数值1,为假则赋值数值2

/**
  * @author Lantzrung
  * @date 2022年7月19日
  * @Description
  */

public class Demo {

	public static void main(String[] args) {

		int score = 86;
		String ispass = (score>=60)?"及格":"不及格";
		System.out.println(score+"为"+ispass);
		
		//90~100A 75~90B >=60 C <60D
		String level = (score>=90)?"A":(score>=75)?"B":(score>=60)?"C":"D";
		System.out.println(score+"为"+level);
	}

}

     --自增自减操作

        如果自增或自减符号和其他运算符一起操作时,会有顺序的先后:

        ++在变量的后面,所以先进行算术运算再进行自增操作

        ++在变量的前面,所以先进行进行自增操作再算术运算

/**
 * @author Lantzrung
 * @date 2022年7月19日
 * @Description
 */

public class Test02 {
	public static void main(String[] args) {
		int i = 3; // i++ --> i+1 --> i先赋值再自增+1 
		// int a = i+++4;//其实这里就是i++ + 4
		int a = i++ + 4;// 思考,这里输出的是8 还是 7呢?
		System.out.println("i:" + i);// 4
		System.out.println("a:" + a);// 7 答案是7,为什么不是8上面i都输出是4了,这是为什么 
        // 呢?
		// 因为i++是先赋值后自增加1的,也就是说i是先赋值3的值去和a是4的值去运算先,再把结果等 
        // 于7的值赋值给a
		// 然后a输出是7的值,最后i才进行自增加1
		
		// 这里记得变量i要换一个继续定义等于3 因为上次自增后结果不等于3了
		int i1 = 3;
		int a1 = ++i1 + 4;//这次是8 还是 7呢?qwq
		System.out.println("i1:"+i1);//4
		System.out.println("a1:"+a1);//8 答案是8 详细我也不解释了
		
		// 简要的概括就是:
		// ++在变量后面涉及到其他的运算时,则先执行其他的运算,然后再自增
		// ++在变量前面涉及到其他的运算时,则先自增,然后再执行其他的运算
		
		
	}
}
/**
 * @author Lantzrung
 * @date 2022年7月19日
 * @Description
 */

public class Demo01 {

	public static void main(String[] args) {

		int i = 5;
		int b = 6;
		if ((i++ == 5) && (++b == 6)) {
			// 分析:因为有小括号,所以优先级是先算小括号里面的,然后再执行短语与的,
			// 前者执行条件中先赋值,故此5==5成立,最后再自增1;
			// 后者执行条件中先自增+1,故此7==6不成立,false又因是短路与,故此执行体中期改 
            // i=7;不执行
			// 但最后b还是等于7 a是等于6
			i = 7;
		}
		System.out.println(i);// 6
		System.out.println(b);// 7

		int i1 = 5;
		int b1 = 6;
		if ((i1++ == 5) || (++b1 == 6)) {
			// 分析:前者执行条件中成立 最后i1自增等于6(但还不是最终结果);
			// 因为这个是短语或,因为前者已经是true了,所以后者不执行直接输出b1是等于6,
			// 最后执行方法体中的i1=7,直接把之前i1=6覆盖掉了
			i1 = 7;
		}
		System.out.println(i1);// 7
		System.out.println(b1);// 6

		int i2 = 5;
		int b2 = 6;
		if ((i2++ == 5) & (6 / (b2++ -6)) > 0) {
			i2 = 7;
		}

		System.out.println(i2);//编译错误因为被除数不能为0,b2:6-6是等于0的所以报 
        //错:Exception in thread "main" java.lang.ArithmeticException: / by zero
		//System.out.println(b2);

	}

}

你可能感兴趣的:(01,什么是JAVA语言,大数据,java,开发语言,jvm,算法)