Java基础07:基本运算符

基本运算符


运算符

Java语言支持如下运算符:

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

  • 赋值运算符:=

  • 关系运算符:>,<,>=,<=,==,!=,instanceof

  • 逻辑运算符:&&,||,!

  • 位运算符:&,|,……,~,>>,<<,>>>(了解就行)

  • 条件运算符: ?:(了解)

  • 扩展赋值运算符:+=,-=,*=,/=(了解)


算术运算

算术运算可以是多元运算,为方便起见,下面我们用二元运算来演示:

// 快捷键 Ctrl + D : 复制当前行到下一行
	int a = 10;
	int b = 20;
        
	System.out.println(a+b);    // 30
	System.out.println(a-b);    // -10
	System.out.println(a*b);    // 200
	System.out.println(a/b);    // 0  因为 a 和 b 都是整数类型,所以结果也会取整
	System.out.println(a/(double)b);    // 0.5  可以通过类型转换来解决程序自动取整问题

	byte c = 30;
	short d = 40;
	long e = 50;
	int f = 60;

	// 特别的, 不同类型数据之间相加减时,会出现结果类型转换的现象
	System.out.println(c+d+e);  // 120 当操作数中存在long类型操作数,结果就会转换为long类型
	System.out.println(c+d);  // 70  若操作数中不存在long类型操作数,结果则转换为int类型
	System.out.println((long)(d+f));  	// 100  即使是算术运算的结果,也可以通过强制转换,来	改变结果的数据类型

	// 同理,其他情况的结果也都是向最高级别的操作数的数据类型转换

在这里插入图片描述

在这里插入图片描述

  • % 是取余运算,结果只保留余数,也叫模运算(二元运算符)

int a = 21;
int b = 10;

System.out.println(a%b);	// 1  21除10商2余1,所以运算结果即为1

  • ++是自增运算,- -是自减运算,例如x++,可以理解为x=x+1,同理,x- -就是x=x-1(一元运算符),自减运算的符号位置是会影响运算的,看下面的实例演示:

int a = 1;
int b = 1;

System.out.println(a++);	// 1	自增运算符在操作数的后面,此时是先用a的本身,再执行自增运算,自增运算的结果不会在本条语句中呈现
System.out.println(a);		// 2	自增运算结束,再查看a的值时,可以发现a自身已经加1了

System.out.println(b);		// 1	
System.out.println(++b);	// 2	自增运算符在操作数的前面,此时是先执行自增运算,再使用b,所以在这条语句的执行结果中可以看到b自身加1了

// 自减运算同理

关系运算

关系运算符的返回结果是布尔值,只有两种:true、false

a > b 若 a 大于 b 返回true,否则false

a < b 若 a 小于 b 返回true,否则false

a >= b 若 a 大于等于 b 返回true,否则false

a <= b 若 a 小于等于 b 返回true,否则false

a == b 若 a 等于 b 返回true,否则false
注意,=是赋值运算符,==才是判断两侧是否相等的关系运算符

a != b 若 a 不等于 b 返回true,否则false

实例演示:

	// 关系运算符返回的结果:正确,错误   布尔值
        
        // if
        int a = 10;
        int b = 20;

        System.out.println(a>b);    // false
        System.out.println(a<b);    // true
        System.out.println(a==b);   // false
        System.out.println(a!=b);   // true


逻辑运算

逻辑运算符,有三种操作,与(二元运算符)、或(二元运算符)、非(一元运算符)
返回结果类型是布尔值类型,true 和 false

a && b:“与”操作,只有 a 和 b 都为真时,结果为true,否则为false

a || b:“或”操作,a 和 b 只要有一个为真,结果即为真,只有 a 和 b 都为假时,结果才为false。

!a:“非”操作,若 a 为假,返回true,若 a 为真,返回false


        boolean a = false;
        boolean b = true;
        boolean c = false;
        boolean d = true;

        System.out.println(a && b);		// false
        System.out.println(b && d);		// true
        System.out.println(b || c);		// true
        System.out.println(a || c);		// false
        System.out.println(!a);		// true
        System.out.println(!b);		// false

逻辑运算是一种短路运算:

  • 执行“与”操作时,只要第一个操作数为假,就会跳过对第二个操作数的判定过程,直接返回false

  • 执行“或”操作时,只要第一个操作数为真,就会跳过对第二个操作数的判定过程,直接返回true


	int a = 10;
	boolean b = (a>10)&&(a++>10);  // 显然,第一个操作数为假
	
	System.out.println(b);	// false
	System.out.println(a);	// 10   a的值不变,是因为在 b 的赋值语句中,a++跳过未执行
	

位运算符

位运算很好理解,就是对应位置上的逻辑运算

假设(接下来的赋值操作都写成了二进制形式,实际赋值肯定不会这样写,这样写是为了便于演示):

A = 0011 1100 A 是一个二进制数

B = 0000 1101 B 是一个二进制数

C = 0000 0010 C 是一个二进制数,值为2

那么:

A&B = 0000 1100 对应位置都是1,结果才为1,否则为0

A|B = 0011 1101 对应位置都是0,结果才为0,否则为1

A^B = 0011 0001 对应位置相同,结果为0,不同则为1

~B = 1111 0010 对应位置取反

C<<3 = 0001 0000 C 的位置向左移动3位,值变成了16
C>>2 = 0000 0100 C 的位置向右移动2位,值变成了8

可以理解为,a << x 就是 a 乘了 x 个 2,a >> x就是 a 除了 x 个2

在很多算法里面,可以用位运算做一些很精巧的操作,因为位运算效率非常高,它是直接与计算机底层(二进制)打交道的

<<>> 运算要死死记住,这两个常用的位运算对我们来说是很有必要的


条件运算

条件运算是一种三元运算

x ? y : z 若x为真,则y,否则为z

实例演示:


        boolean flag = true;
        int score = 80;
        String yes = "及格";
        String no = "不及格";

        if(score<60) flag=false;

        System.out.println(flag ? yes : no);  // 及格  因为80>60,所以flag依然为真,条件运算选择输出yes的值
        

扩展赋值运算

这是一种偷懒运算

a+=b a = a+b

a-=b a = a-b

a*=b a = a*b

a/=b a = a/b


字符串连接符

+在某些特定的情况下,可以作为字符串连接符

实例:

	
	int a = 10;
	int b = 20;
	
	System.out.println(""+a+b);
	/* 1020  显然,这个结果是把 a 和 b 作为字符串连接起来
	了,这是因为在本次运算的最开始,有一个空字符串参与了运
	算,使空字符后面的运算都变成了字符串之间的连接操作 */
	
	System.out.println(a+b+"");	
	/* 30	这里是先把 a 和 b 相加后再转换为字符串,这是因
	为 + 作为字符串连接符是从算式中出现字符串开始的,而 a 和 b 是在空
	字符串之前出现的,所以还是按照基本算术运算的规则被操作 */
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值