运算符

运算符:就是对常量和变量进行操作的符号。

分类:算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符。

算数运算符

算数运算符:+,-,*,/,%,++,--

  1. +的用法:a.加法    b.正号    c.字符串连接符
  2. /和%的区别:数据做除法操作的时候,/取得是商,%取得是余数(A:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型,乘1.0或者除以1.0转换成boolean)
  3. ++和--的用法:a.他们的作用是自增1或者自减 1   b.使用,放在操作数的前面:先自增或者自减,再参与操作,放在操作数的后面:先参与操作,再自增或者自减

赋值运算符

  1. 赋值运算符:=,+=,-=,*=,/=,%=
  2. =叫做赋值运算符,也是最基本的赋值运算符
    int x = 10; 把10赋值给int类型的变量x。
  3. +=,-=,*=,/=,%=,
  • int x = 10;int x += 20;//x最后为30     运算方式;1.x+20//10+20=30,2.x=(x+20)//x=30        把左边和右边做+    -    *    /      %  运算然后赋值给左边。      
  • 扩展的赋值运算符的特点:隐含了自动强制转换。
  • int x = 10;int x += 20;//int x += 20;等价于 x = (x的数据类型)(x+20);

比较运算符

  1. 比较运算符:==,!=,>,>=,<,<=
  2. 无论运算符两端简单还是复杂最终结果是boolean类型。

逻辑运算符

  1. 逻辑运算符:&,|,^,!,&&,||
  2. 逻辑运算符用于连接boolean类型的表达式或者值。(表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子)
  3. &:有false则false
    |:有true则true
    ^:相同则false,不同则true。情侣关系。
    !:非true则false,非false则true(偶数个!不改变本身)
    &&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
    ||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
  4. 开发中常用的逻辑运算符:&&,||,!

位运算符

  1. 位运算符:<<(左移),>>(右移),>>>(无符号右移) &,|,^,~
  • <<(左移)左边最高位丢弃,右边补齐0,(<< 把<<左边的数据乘以2的移动次幂)
  • >>(右移),最高位是0,左边补齐0;最高为是1,左边补齐1(<< 把<<左边的数据除以2的移动次幂)
  • >>>(无符号右移),无论最高位是0还是1,左边补齐0   
      •  &(位与运算,有0则0),
      • |(位或运算有1则1),
      • ^(位异或运算相同则0,不同则1),一个数据针对另一个数据位异或两次,该数不变
      • ~(按位取反运算,0变1,1变0)
  1. 位运算是直接针对二进制运算
  2. */
    class OperatorDemo {
    	public static void main(String[] args) {
    		//&,|,^,~
    		
    		int a = 3;
    		int b = 4;
    		
    		System.out.println(3 & 4);
    		System.out.println(3 | 4);
    		System.out.println(3 ^ 4);
    		System.out.println(~3);
    	}
    }
    /*
    	分析:因为是位运算,所以我们必须先把数据换算成二进制。
    	
    	3的二进制:11
    		00000000 00000000 00000000 00000011
    	4的二进制:100
    		00000000 00000000 00000000 00000100
    	
    	&位与运算:有0则0。
    		00000000 00000000 00000000 00000011
    	   &	00000000 00000000 00000000 00000100
    		-----------------------------------
    		00000000 00000000 00000000 00000000
    		结果是:0
    		
    	|位或运算:有1则1。
    		00000000 00000000 00000000 00000011
    	   |	00000000 00000000 00000000 00000100
    		-----------------------------------
    		00000000 00000000 00000000 00000111
    		结果是:7
    		
    	^位异或运算:相同则0,不同则1。 
    		00000000 00000000 00000000 00000011
    	   &	00000000 00000000 00000000 00000100
    		-----------------------------------
    		00000000 00000000 00000000 00000111
    		结果是:7
    		
    	~按位取反运算符:0变1,1变0
    		00000000 00000000 00000000 00000011
    	   ~	11111111 11111111 11111111 11111100 (补码)
    	   
    	   补码:11111111 11111111 11111111 11111100
    	   反码:11111111 11111111 11111111 11111011
    	   原码:10000000 00000000 00000000 00000100
    		结果是:-4
    */
  3. class OperatorDemo2 {
    	public static void main(String[] args) {
    		int a = 10;
    		int b = 20;
    		
    		System.out.println(a ^ b ^ b); //10
    		System.out.println(a ^ b ^ a); //20
    	}
    }
  4. /*
    	面试题:
    		请自己实现两个整数变量的交换
    */
    class OperatorTest {
    	public static void main(String[] args) {
    		int a = 10;
    		int b = 20;
    		
    		System.out.println("a:"+a+",b:"+b);
    		
    		//方式1:使用第三方变量(开发中用的)
    		/*
    		int c = a;
    		a = b;
    		b = c;
    		System.out.println("a:"+a+",b:"+b);
    		System.out.println("------------");
    		*/
    		
    		//方式2:用位异或实现(面试用)
    		//左边:a,b,a
    		//右边:a ^ b
    		/*
    		a = a ^ b;
    		b = a ^ b; //a ^ b ^ b = a
    		a = a ^ b; //a ^ b ^ a = b
    		System.out.println("a:"+a+",b:"+b);
    		*/
    		
    		//方式3:用变量相加的做法
    		/*
    		a = a + b; //a=30
    		b = a - b; //b=10
    		a = a - b; //a=20
    		System.out.println("a:"+a+",b:"+b);
    		*/
    		
    		//方式4:一句话搞定
    		b = (a+b) - (a=b); //b=30-20=10,a=20
    		System.out.println("a:"+a+",b:"+b);
    	}
    }

三目运算符

  1. 单目运算符:~3(只有一个操作数)
    双目运算符:3 + 4(有两个操作数)
    三目运算符:格式:比较表达式?表达式1:表达式2;    比较表达式:结果是一个boolean类型。
    执行流程:
    根据比较表达式的计算返回一个true或者false。
    如果是true,就把表达式1作为结果。
    如果是false,就把表达式2作为结果。
  2. class OperatorTest {
    	public static void main(String[] args) {
    		//获取两个整数中的最大值
    		int x = 100;
    		int y = 200;
    		
    		int max = (x > y? x: y);
    		System.out.println("max:"+max);
    		System.out.println("--------");
    		
    		//获取三个整数中的最大值
    		int a = 10;
    		int b = 30;
    		int c = 20;
    		
    		//分两步:
    		//A:先比较a,b的最大值
    		//B:拿a,b的最大值在和c进行比较
    		int temp = ((a > b)? a: b);
    		//System.out.println(temp);
    		int max1 = (temp > c? temp: c);
    		System.out.println("max1:"+max1);
    		
    		//一步搞定
    		//int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);
    		//这种做法不推荐。
    		//int max2 = a > b?a > c? a: c:b > c? b: c;
    		//System.out.println("max2:"+max2);
    		System.out.println("--------");
    		
    		//比较两个整数是否相同
    		int m = 100;
    		int n = 200;
    		
    		//boolean flag = (m == n)? true: false;
    		boolean flag = (m == n);
    		System.out.println(flag);
    	}
    }
     

    优先级

    描述

    运算符

    1

    括号

    ()、[]

    2

    正负号

    +、-

    3

    自增自减,非

    ++、--、!

    4

    乘除,取余

    *、/、%

    5

    加减

    +、-

    6

    移位运算

    <<、>>、>>>

    7

    大小关系

    >、>=、<、<=

    8

    相等关系

    ==、!=

    9

    按位与

    &

    10

    按位异或

    ^

    11

    按位或

    |

    12

    逻辑与

    &&

    13

    逻辑或

    ||

    14

    条件运算

    ?:

    15

    赋值运算

    =、+=、-=、*=、/=、%=

    16

    位赋值运算

    &=、|=、<<=、>>=、>>>=

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值