Java运算符
运算符的分类:
算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符
算术运算符
算术运算符包括:
+、-、*、/、%、++、==
+、-、*、/:分别是数学运算中的加减乘除;
%: 取余;
++:自增一;
--:自减一;
代码举例:
+、-、*、/、%
int a=10;
int b=20;
int c=0;
int d=0;
int e=0;
int f=0;
int g=0;
c=a+b;//运算结果为30;
d=b-a;//运算结果为10;
e=a*b;//运算结果为200;
f=b/a;//运算结果为2;
g=a%b;//运算结果为10;10/20得到的结果是商0余10,因此a%b=10。
++、--
i++,++i的区别:
当++(--)单独使用时,++(--)放前面或者放后面没有区别,要么自增一要么自减一;
举例:
int i=1;
i++;
++i;//运算无区别,都是给i自增一
但是当++或--在运算式中混合使用时,会存在区别。
举例:
++在前:
int i=1;
int h=++i;//h=2;i=2;
++在后:
int j=1;
int y=j++;//y=1;j=2;
区别如下:
当++在前时,在进行运算时先给i自增一,然后将i的值赋给h;因此++在前的运算结果为h=2;i=2。
当++在后时,在进行运算时先将j=1的值赋给y,然后在给j进行自增一的运算;因此++在后的运算结果为y=1;j=2。
在Java语言中“+”不仅有运算的作用,还有其他的作用,加号作用如下:
(1)数学方面相加的作用(两端都是数值做数学运算);
(2)起一个连接符的作用(当“+”运算两边有任意一边是字符串,那么加号就会起一个连接符的作用,将两端内容拼接起来,形成新的字符串)。
举例:
System.out.println(2+3);//结果为:5
System.out.println(2+"22");//结果为:222
System.out.println("100"+100);//结果为:100100
System.out.println(20+30+"50");//结果为:5050
System.out.println("100"+20+30);//结果为:1002030
System.out.println('a'+5);//结果为:102(在ASII表中:字符'a'表示的是数字97.后面每个英文字符依次类推。字符'A'表示数字65,依次类推。'0'表示数字48)。
System.out.println("hello"+'a'+1);//结果为:helloa1
System.out.println('a'+1+"hello");//结果为:98hello
System.out.println("5+5="+5+5);//结果为:5+5=55
System.out.println(5+5+"=5+5");//结果为:10=5+5
赋值运算符
赋值运算符包括:=、+=、-=、/=、%=
举例:
int a=10;//将10赋值给a;
+=解释:
int b=20;
b+=20;//其实在运算过程中b+=20就相当于b=b+20。(-=、/=、*=、%=与+=类似)。
+=在运算时会帮你自动强制转换,当运算结果超过变量类型的范围会自动帮你进行强制类型转换
举例:
byte i=126;
i+=10;
System.out.println(a);
//得到的结果为-120,并不是136,这个就是上面那句话的意思;
比较运算符
比较运算符包含:== ,!= , < , > , <= , >= , instanceof
==表示等于(=代表赋值,在计算机语言中,判断两个值是否相等时用的是“==”符号);
!=表示不等于的意思;
其余的符号与数学运算相同(小于、大于,小于等于、大于等于)。
举例:
int a=100;
int b=1000;
boolean Dy=a==b;
System.out.println(Dy);//输出结果为false。
注意: 比较运算符运算的结果均为布尔类型true /false
逻辑运算符
1.逻辑运算符包含:
&(并且) , |(或者) , !(非) , ^(异或) , &&(短路与) , ||(短路或)
2.逻辑运算符运算结论;
&逻辑与:有false则false。
|逻辑或:有true则true。
^逻辑异或:相同为false,不同为true。
!逻辑非:非false则true,非true则false。
特点:偶数个不改变本身(举例:!!两个非回本身)。
3.逻辑运算符编程举例:
int a=10;
int b=20;
boolean flag=a>b&a!=b;
System.out.println(flag);//结果为:false
boolean flag1=a>b|a!=b;
System.out.println(flag1);//结果为:true
System.out.println(true^true);//结果为:false
System.out.println(false^true);//结果为:true
System.out.println(!(1==1));//结果为:false
4.&&与&的区别:
&运算时两边都进行运算,而&&在运算时,当左端为false时右端不再进行运算,当左端为true时右端继续进行运算
int a = 20;
int b = 20;
boolean f = a < b & b++ > a;
System.out.println("f:" + f);//false
System.out.println("b:" + b);//21
int i=20;
int j=20;
boolean g = i < j && j++ > i;
System.out.println("g:" + g);//false
System.out.println("j:" + j);//20
5.|与||的区别:
|两端都要进行运算;
||只要左端为true右端就不需要执行了,左端为false时右端需要执行。
int h = 20;
int y = 20;
//boolean f1 = h < y | y++ > 20;
//取消注释,执行代码boolean f1 = h < y | y++ > 20
//注释boolean f1 = h == y || y++ > 20,得到的f1为false,并且y=21。
boolean f1 = h == y || y++ > 20;
System.out.println("f1:" + f1);//true
System.out.println("y:" + y);//20
注意:
1、逻辑运算符一般用于连接boolean类型的表达式或者值。
在Java中我们要表示一个数大于3并且小于6 ,不可以写成3<x<6,应该写成 x>3 & x<6 。
2、表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
算术表达式:a + b
关系表达式:a == b
位运算符
1.位运算符包含:
&(与),|(或),^(异或) , ~(按位取反) , <<(左移) ,>>(右移) ,>>>(无符号右移)
注意事项:位运算是直接对二进制补码进行运算。运算效率高一些
2.位运算符中的&、|、^
举例
int a=3;
int b=4;
int f=a&b;
int j=a|b;
int k=a^b;
System.out.println(f);//0
System.out.println(j);//7
System.out.println(k);//7
原理:
3的二进制是00000011
4的二进制是00000100
二进制计算时使用的是补码,正数的反码、补码与原码相同
3&4(3的补码是:00000011,4的补码是:00000100)
00000011&00000100=00000000;//0
00000011|00000100=00000111;//7
00000011^00000100=00000111;//7
负数计算方法与正数相同,不过负数需要进行计算反码以及补码,之后才可以进行上述计算。
3.按位取反~
正数的按位反:+9
原码:00001001
反码:00001001
补码:00001001
按位取反 1 1110110 补码
再推回原码
1 1110110 补码
- 1
-----------------------------
1 1110101 反码
取反
----------------------
1 0001010 原码
最后结果是: -10
负数的按位取反:-9
原码:1 0001001
反码:1 1110110
补码:1 1110111
负数的补码按位取反:0 0001000 的到正数 正数的原反补一样
最后结果是:8
4.<<(左移) 、>>(右移) 、>>>(无符号右移)
<<:左移 空位补0,被移除的高位丢弃。
>>:右移 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,高位补1。
>>>:无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补。
注意:
位运算符总结特点:
(1)^位异或相同则0,不同则1;
(2)一个数被另外一个数位异或两次,该数不变;
(3)自己被自己位异或结果是0;
(4) << :把 << 左边的数据乘以2的移动次幂 例如 10 << 3 结果 10 * 2 ^ 3 = 80 ;
>> :把 >> 左边的数据除以2的移动次幂 例如 40 >> 3 结果 40 / 2 ^ 3 = 5
(5)位运算符运算速度高一些。
三目运算符
1.三目运算符语法:
表达式?结果1:结果2
2.三目表达式执行流程:
计算关系表达式的值,如果为true, 运算后的结果是表达式1;
如果为false,运算后的结果是表达式2;
3.代码举例:
int num1=10;
int num2=20;
int num3=30;
int max=num1>num2?num1:num2;
int max2=max>num3?max:num3;
System.out.println(max2);//结果为:30