Java基础:运算符篇

Java基础:运算符篇

1.运算符根据用法不同分为以下八种

算术运算符

赋值运算符

关系运算符(比较)

逻辑运算符

位运算符

三元运算符(条件)

(1)算术运算符(这里只讲一些特殊用法)

运算符详解实例结果
+其用法主要分三个方面:1.表示正数;
2.两边数字相加;
3.拼接(将两边字符串拼接)
1.表示正数 :+(-2);
2.表示数字相加:两边必须都是整型;
3.讲两边字符串进行拼接处理;
1.将负数转换为正数(2)
2.若”+“两边其中一个是字符型“+”将作为字符串连接符使用(也就是第三个用法);
3.在**(1.1)**处详解;
-1.表示负数;
2.减法运算符
1.可以将正数转换为负数,或直接声明负数;
2.减法运算,”-“两边必须都是整型
*两边必须都是整型
/两边必须都是整型0不可以作为除数进行运算会报错
%取模运算(取余)两边必须都是整型;取“%”前面的数除以后面的数的余数在**(1.2)**处详解;
++自增自增分为前自增和后自增(++i)(i++)在**(1.3)**处详解;
自减(i–)(–i)在**(1.3)**处详解
(1.1)“+”拼接字符串详解
//+既可以做拼接字符处理,也可以做加法运算符,在java中优先级是怎样的
    System.out.println("6+7="+6+7);
	System.out.println(6+7+"=6+7");
//结果;
	6+7=67
	13=6+7
//如果第一个+做拼接字符串处理那么同一语句后面的+都当做拼接运算
//但是如果+在拼接运算前面则不受影响;
(1.2)“%”取模运算详解
//测试
		System.out.println(70%7);
        System.out.println(70%6);
        System.out.println(70%90);
        System.out.println(70%100);
        System.out.println(0%70);
        System.out.println(70%0);
//结果
0
4
70
70
0
Exception in thread "main" java.lang.ArithmeticException:
//扩展:java.lang.ArithmeticException
//数学运算异常,类似上面0作为除数进行取模会出现该错误
(1.3)“++”“–”运算详解
//首先要知道i++与++i的结果和i+1是一样的
//但是i++要比i+1效率高
		int i=0;
        int j=i++;//这一语句相当于   int j=i; i=i+1;
        System.out.println("i="+i+"-----j="+j);

        int a=0;
        int b=++a;//这一语句相当于    a=a+1; b=a;
        System.out.println("a="+a+"-----b="+b);
//结果
		i=1-----j=0
		a=1-----b=1
//也就是说i++相当于先将i进行赋值再运算i+1
//++i则是先运算再赋值;
//--同上

(2)赋值运算符

运算符运算实例结果
=赋值int a=4;
String b=“java学习”;
将4赋值给a
将字符串赋值给b
+=加等于a=3;b=2;a+=b;(a=a+b下同)a=5;b=2;
-=减等于a=3;b=2;a-=b;a=1;b=2;
*=乘等于a=3;b=2;a*=b;a=6;b=2;
/=除等于a=3;b=2;a/=b;a=1;b=2;
%=模等于a=3;b=2;a%=b;a=1;b=2;

(3)关系运算符

运算符含义说明实例结果
>大于只支持左右两边操作数是数值类型。
如果前面变量的值大于后面变量的值, 则返回 true。
2>3false
>=大于或等于只支持左右两边操作数是数值类型。
如果前面变量的值大于或等于后面变量的值, 则返回 true。
4>=2true
<小于只支持左右两边操作数是数值类型。
如果前面变量的值小于后面变量的值,则返回 true。
2<3true
<=小于或等于只支持左右两边操作数是数值类型。
如果前面变量的值小于或等于后面变量的值, 则返回 true。
4<=2false
==相等如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,
只要它们的值相等,也都将返回 true。
如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象(内存地址)就会返回 false。
Java 也支持两个 boolean 类型的值进行比较。
44
97
’a’
5.05
true
false
Integer i=new Integer(0);
Integer a=new Integer(0);
i==a
true
true
true
false
false
!=不相等如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。
如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象(内存地址)就会返回 true。
4!=2true

(4)逻辑运算符

运算符用法含义说明实例结果
&&a&&b短路与ab 全为 true 时,计算结果为 true,否则为 false。
只有两边条件都为真时结果才为真;
2>1&&3<4true
||a||b短路或ab 全为 false 时,计算结果为 false,否则为 true。
只要一边条件为真时结果就为真;
2<1||3>4false
!a逻辑非a 为 true 时,值为 false,a 为 false 时,值为 true!(2>4)true

逻辑运算符还有**逻辑与(&)逻辑或(丨)**在位运算符中讲;

(什么是短路:如果第一个条件不符合则不执行后面的条件)

  //短路测试
        int i = 0;
        boolean a = i==1 && ++i==1;
        System.out.println(a);
        System.out.println(i);


        int j = 0;
        boolean b = i==0 && ++j==1;
        System.out.println(b);
        System.out.println(j);

//结果
false
0
true
1

(5)位运算符

位运算符相当于二进制运算符

而且位运算符不能对float、double、Boolean进行位运算

在Java语言中,提供了7种位运算符,分别是按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、带符号右移(>>)和无符号右移(>>>)

其中只有 ~ 是单目运算符

按位与(&):

就是将两个变量的二进制进行比较;

比较都为1则返回1,一个为0则返回0;

详细点:

//先提出问题这两句语句会打印出什么?		
		int i=13;
        System.out.println(i&14);
//首先算一下13的二进制(算法可以百度)
//这里得出i的二进制:00001101   再计算出14的二进制00001110
//13:00001101
//14:00001110
//按位与运算就是将每一位二进制进行比较,都为1则为1
//这样得出:00001100
//那么将00001100转换为10进制就是System.out.println(i&14);的结果
12

二进制

按位或(丨)

比较二进制一个为1则返回1,都为0则返回0;

		int i=13;
        System.out.println(i|14);
//13:00001101
//14:00001110
//根据上面的规则得到:00001111
//会打印15
按位与(&)按位或(丨)和逻辑与(&)逻辑或(丨)

首先写法上相同,只是两边的变量不同,

对于两个逻辑量,

true&true

也是按照二进制进行比较的,只是如果相同,根据上面的规则肯定也十分返回true,与短路与只是差了短路而已,所以也叫逻辑与;

逻辑或同理;

按位异或(^)

比较二进制两个相同则返回0,不同则返回1

按位异或也可以当做逻辑运算符使用【就是说当一个条件为真另一个为假,则返回true,否则false】

		int i=13;
        System.out.println(i^14);
//13:00001101
//14:00001110
//根据上面的规则得到:00000011
//结果3
取反(~)

单目运算符:只需要一个变量进行运算

见名知意,将其二进制1换成0,0换成1

//13:00001101
 System.out.println(~13);
//1111001
//二进制中还存在正负数分别用1,0表示
//结果可以试一下,想一下原因
左移(<<)带符号右移(>>)

左移:将其二进制向左移动n位

//13:00001101
System.out.println(13<<2);
//移动后补位0
//移动后:00110100转换成10进制为52
//左移规律:每向左移动一位则相当于其十进制乘以2,13<<2要比13*2*2效率高

带符号右移:将其二进制向右移动n位

//13:00001101
System.out.println(13>>2);
//移动后补位0
//移动后:00000011转换成10进制为3
//右移规律:每向右移动一位则相当于其十进制除以2

负数有符号右移计算-4>>2

    首先我们需要取得-4的补码 补码为反码+1

    反码为正码按位取反

    由正码0000 0100  取反得

    1111 1011

    再+1得

    1111 1100

    右移两位,符号位为1,所以高位置1得

    1111 1111

    此时减一得补码

    1111 1110

    补码转正码得

    0000 0001

    十进制为1,加负号得

    -1
无符号右移(>>>)

与右移相同,左边都用0补位 不管符号是什么;

(6)三元运算符

由(?:)符号表示的,具体的含义其实就和if-else结构的含义差不多,这种运算符会将某个条件作两种处理,如果满足条件的话就执行第一个结果,如果不满足的话就执行另外一个结果,例如:
Int A,B,C;
A=2;
B=3;
C=A>B ? 100 :200;
这条语句的意思是,如果A>B的话,就将100赋给C,否则就将200赋给C;
欢迎大家关注我的公众号【static修饰符】,学习更多的java知识,一同进步。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值