运算符

运算符

一、算数运算符

1、基本运算符

1)加法(+)
    int a = 10;
    int b = 10;
    System.out.println(a+b);

	//结果为
	20

    int a = 10;
    double b = 1.2;
    System.out.println(a+b);//自动将 int 类型的a提为 double 类型然后在运算(范围小的提升为范围大的)

	//结果为
	11.2
2)减法(-)
    int a = 15;
    int b = 10;
    System.out.println(a-b);

	//结果为
	5

    int a = 10;
    double b = 1.2;
    System.out.println(a-b);

	//结果为
	8.8
3)乘法(*)
    int a = 10;
    int b = 10;
    System.out.println(a*b);

	//结果为
	100

    int a = 10;
    double b = 1.2;
    System.out.println(a*b);

	//结果为
	12
4)除法(/)

注意1 : 除法当中除数是不能为 0 的
而当除数为0时编译能通过,但是运行会出错
例如:

	int a = 10;
    int b = 0;
    System.out.println(a/b);
	
	//结果为
	Exception in thread "main" java.lang.ArithmeticException: / by zero
	at test.main(test.java:14)
	
	ArithmeticException算术异常

注意2 : 如果除数和被除数都为整型,则可能会出现精度丢失
例如:

	int a = 1;
    int b = 2;
    System.out.println(a/b);

	//结果为
	0
5)取余(%)

取余就是被除数除以除数等于商加余数
被除数 / 除数 = 商 + 余数
余数就是取余的结果
例子1

    int a = -10;
    int b = 3;
    System.out.println(a%b);
    
    //结果为
    -1
    
    原因:-10 = 3 *( - 3 ) + (-1)

例子2

    double a = 12.5;
    int b = 2;
    System.out.println(a%b);
    
    //结果为
    0.5
    
    原因:12.5 = 2 * 6 + 0.5

2、增量赋值运算符

1)+=
	a += 10;
	a = a +10;
2)-=
	a -= 10;
	a = a -10;
3)*=
	a *= 10;
	a = a *10;
4)/=
	a /= 10;
	a = a /10;
5)%=
	a %= 10;
	a = a %10;

3、自增/自减运算符

1)自增(++)
    int a = 10;
    a = a++;//先赋值在自增
    System.out.println(a);

    a = ++a;//先自增在赋值
    System.out.println(a);
    
    //结果为
    10
	11
2)自减(–)
    int a = 10;
    a = a--;//先赋值在自增
    System.out.println(a);

    a = --a;//先自增在赋值
    System.out.println(a);
    
    //结果为
    10
	9

二、关系运算符

关系运算符的表达式返回值都是 boolean 类型(即返回值结果是 true 或 false )

1)等于(==)
    int a = 10;
    int b = 20;
    System.out.println(a == b);
    
    //结果为
    false
2)不等于(!=)
    int a = 10;
    int b = 20;
    System.out.println(a != b);
   
    //结果为
    true
3)小于(<)
    int a = 10;
    int b = 20;
    System.out.println(a < b);
   
    //结果为
    true

注意:当 10 < 10 时,结果为 false

    int a = 10;
    int b = 10;
    System.out.println(a < b);
     
    //结果为
    false
4)小于等于(<=)
    int a = 10;
    int b = 10;
    System.out.println(a <= b);
     
    //结果为
    true
5)大于(>)
    int a = 10;
    int b = 20;
    System.out.println(a > b);
   
    //结果为
    false

注意:当 10 > 10 时,结果为 false

    int a = 10;
    int b = 10;
    System.out.println(a > b);
     
    //结果为
    false
6)大于等于(>=)
    int a = 10;
    int b = 10;
    System.out.println(a >= b);
     
    //结果为
    true

三、逻辑运算符

逻辑运算符的操作数和返回值都是 boolean 类型

1、逻辑与(&&)

两个操作数都是 true ,结果为 true ,否则为 false

表达式1 && 表达式2

表达式1为 true 执行表达式2;表达式2为 true ,结果为 true ,表达式2为 false ,结果为 false
表达式1为 false 不执行表达式2,结果为 false

	int a = 10;
	int b = 20;
	int c = 30;
	System.out.println(a < b && b < c);
	     
    //结果为
    true

2、逻辑或( || )

两个操作数都是false ,结果为 false ,否则为 true

表达式1 && 表达式2

表达式1为 false 执行表达式2,表达式2为 true ,结果为 true ,表达式2为 false ,结果为 false
表达式1为 true 不执行表达式,结果为 true

	int a = 10;
	int b = 20;
	int c = 30;
	System.out.println(a < b || b < a);
	 
	 //结果为
    true

3、逻辑非( !)

只有一个操作数,操作数为 true ,结果为 false ; 操作数为 false , 结果为 true;

	int a = 10;
	int b = 20;
	System.out.println(!a < b);
	         
    //结果为
    false

4、短路求值

&& 和 || 遵守短路求值的规则.

	System.out.println(10 > 20 && 10 / 0 ==0); // 打印 false
	System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true

计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值.

结论:

  1. 对于 && , 如果左侧表达式值为 false, 则表达式的整体的值一定是 false, 无需计算右侧表达式.
  2. 对于 ||, 如果左侧表达式值为 true, 则表达式的整体的值一定是 true, 无需计算右侧表达式.

四、位运算符

Java 中对数据的操作的最小单位不是字节, 而是二进制位.

位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算.

1、按位与( & )

对应二进制位上都为 1 ,则为 1 ;都为 0 ,则为 0 ;不相同,也为 0

	int a = 10;
	int b = 20;
	System.out.println(a & b);
			         
    //结果为
    0

进行按位运算, 需要先把 10 和 20 转成二进制, 分别为 1010 和 10100
在这里插入图片描述

2、按位或( | )

对应二进制位上若有 1 ,则为 1 ;都为 0 ,则为 0

    int a = 13;
    int b = 11;
    System.out.println(a | b);
   
    //结果为
    15

进行按位运算, 需要先把 13 和 11 转成二进制, 分别为 1101 和 1011
在这里插入图片描述

注意:
当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算.

3、按位异或( ^ )

二进制对应位上一样则为 0 ,不一样则为 1

    int a = 13;
    int b = 11;
    System.out.println(a ^ b);
   
    //结果为
    6

在这里插入图片描述
.

4、按位取反(~)

如果该位为 0 则转为 1, 如果该位为 1 则转为 0

	int a = 0xf;
	System.out.printf("%x\n", ~a)
	       
    //结果为
    fffffff0

注意:

  1. 0x 前缀的数字为 十六进制数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4 个二进制位.
  2. 0xf 表示 10 进制的 15, 也就是二进制的 1111
  3. printf 能够格式化输出内容, %x 表示按照十六进制输出.
  4. \n 表示换行符

五、移位运算符

按照二进制位来运算

1、左移( << )

最左侧位不要了, 最右侧补 0

	int a = 0x10;
	System.out.printf("%x\n", a << 1);
	
	// 运行结果(注意, 是按十六进制打印的)
	20

2、右移( >> )

最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

	int a = 0x10;
	System.out.printf("%x\n", a >> 1);
	
	// 运行结果(注意, 是按十六进制打印的)
	8
	
	int b = 0xffff0000;
	System.out.printf("%x\n", b >> 1);
	
	// 运行结果(注意, 是按十六进制打印的)
	ffff8000

3、无符号右移( >>> )

最右侧位不要了, 最左侧补 0.

	int a = 0xffffffff;
	System.out.printf("%x\n", a >>> 1);
	
	// 运行结果(注意, 是按十六进制打印的)
	7fffffff

注意:

  1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
  2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
  3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
  4. 移动负数位或者移位位数过大都没有意义.

六、条件运算符

条件运算符只有一个:

表达式1 ? 表达式2 : 表达式3

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.

也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法.

    int a = 10;
    int b = 20;
    System.out.println(a > b ? a : b);// a > b 为真,打印 a 的值, a > b 为假,打印 b 的值
    		       
    //结果为
    20

七、运算符的优先级

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值