运算符
算术运算符
/* 算数运算符 +、-、*、/、%、++、-- ++、–
使用方式:单独使用 参与运算
当++、–出现在操作数的后面时,先传值再自加1
/自减1
当++、–出现在操作数前面时,先自加1/自减1再
传值
*/
class SuanShu{
public static void main(String[] args) {
//操作+
/*int a=3;
int b=4;*/
//+(求和、字符串连接符)
/*System.out.println(a+b);//求和
//数值类型的数据和字符进行求和时
//先把字符转成对应的编码值再进行求和
System.out.println(a+'a');//求和
//字符串常量和任意数据进行拼接
System.out.println(a+"a"+'a');//拼接*/
//操作-
//0.20000000000000018---不是精确结果
//小数没有精确运算
/*double d=2.1-1.9;
System.out.println(d);*/
//操作/
/*int a=6;
int b=2;*/
//ArithmeticException---算术异常
//System.out.println(a/0);
//Infinity-正无穷大 -Infinity-负无穷大
//java支持小数除0
//System.out.println(-a*1.0/0);
//NaN---Not A Number不是一个数
//0/0.0 0.0/0.0
//System.out.println(0.0/0);
//0
//当参与操作的都是整型数据结果依然是整型数据
//System.out.println(2/4);
//当参与操作的数据出现小数结果就是小数
//System.out.println(2*1.0/4);
//操作%
/*int a=3;
int b=4;
//%左边数据的正负决定了结果的正负
System.out.println(a%b);
System.out.println(-a%b);
System.out.println(a%-b);
System.out.println(-a%-b);*/
//操作++、--
int a=3;
//int b=--a;//参与运算
//System.out.println(a++);//单独使用
//System.out.println(++a);//单独使用
//3++ +(--4)+(3--)+(++2)
//a=3 4 3 2 3
//左边变量值改变之后会影响右边变量的值
int c=(a++)+(--a)+(a--)+(++a);
//byte、short、char做++/--时
//底层会默认添加强制类型转换
byte b1=127;
b1++;
short s=-32768;
s--;
System.out.println(s);
}
}
赋值运算符
/* 赋值运算符 =把右边的值赋值给左边 扩展赋值运算符(底层强制类型转换)
+=、-=、*=、/=、%=、&=(按位与等)、|=(按位或等)、^=(按位异或等)、 >>=(右移等)、<<=(左移等)、>>>=(无符号右移等) */
class FuZhi{
public static void main(String[] args) {
//定义变量
/*int a=3;
int b=4;
a+=b;//a=a+b;*/
//
/*byte b=2;
//b=b+3;b+3为int类型
b+=3;//b=b+3;底层默认添加强制类型转换
System.out.println(b);//7*/
//支持定义形式
//int a=1,b=2,c=3;
//不支持连等定义
//int a=b=c=3;
//支持连等赋值
int a=3;
//展开从右往左计算
//b=3+=3-=3=3*5=15
//b=3+=3=3-15=-12
//b=3=3+(-12)=-9
//int b=a+=a-=a*=5;
//b=3+=3-=3*=3++
//右边变量的值改变了不会影响左边已经编译好的值
int b=a+=a-=a*=a++;
System.out.println(b);//-9
System.out.println(a);
}
}
关系(比较)运算符
/* 关系(比较)运算符(结果值一定是布尔值) ==、!=、>、<、>=、<= a>b>c a>b b>c */
class BiJiao{
public static void main(String[] args) {
//操作==
System.out.println(2==4);
//操作>=
System.out.println(5>=0);
//操作!=
System.out.println(4!=5);
}
}
逻辑运算符
/* 逻辑运算符 用于连接左右两边布尔值 &(逻辑与)、|(逻辑或)、^(逻辑异或)、!(逻辑非)
、&&(双与)、||(双或) 总结:
1.&:遇见false则false
2.|:遇见true则true
3.^:相同则false,不同则true (吸铁石 同性相斥、异性相吸)
4.!:结果值取反(当出现偶数个时结果不变)
&&(双与)、||(双或)(常用)
&&和&运算规律一致,但是当&&左边出现false时,右边默认不执行—短路效果
||和|运算规律一致,但是当||左边出现true时右边默认不执行—短路效果
*/
class LuoJi{
public static void main(String[] args) {
//定义变量
int a=1;
int b=2;
int c=3;
//操作&
System.out.println((a>b)&(b>c));//false&false false
System.out.println((a>b)&(b<c));//false&true false
System.out.println((a<b)&(b>c));//true&false false
System.out.println((a<b)&(b<c));//true&true true
//
System.out.println("---------------------");
//操作|
System.out.println((a>b)|(b>c));//false|false false
System.out.println((a>b)|(b<c));//false|true true
System.out.println((a<b)|(b>c));//true|false true
System.out.println((a<b)|(b<c));//true|true true
//
System.out.println("---------------------");
//操作^
System.out.println((a>b)^(b>c));//false^false false
System.out.println((a>b)^(b<c));//false^true true
System.out.println((a<b)^(b>c));//true^false true
System.out.println((a<b)^(b<c));//true^true false
//
System.out.println("---------------------");
System.out.println(!(!(b>c)));//true
//
System.out.println("---------------------");
//操作&&
//和逻辑与的运算规律一致
System.out.println((a>b)&&(b>c));//false&&false false
System.out.println((a>b)&&(b<c));//false&&true false
System.out.println((a<b)&&(b>c));//true&&false false
System.out.println((a<b)&&(b<c));//true&& true true
//
System.out.println("---------------------");
//a=1 b=2 c=3
//||出现在&&的左边且||出现短路
//就会把后面的内容以及&&一并短路掉
System.out.println((true)||(a++==b)&&(b>c--));
System.out.println(a);//1
System.out.println(c);//3
}
}
位运算符
/*
位运算符
数据转成二进制补码形式&(按位与)、|(按位或)、^(按位异或)、~(按位取反) 、>>(右移)、<<(左移)、>>>(无符号右移)
*/
class WeiSuanDemo1{
public static void main(String[] args) {
//定义变量
int a=2;
int b=3;
//操作&
System.out.println(a&b);//2
//操作|
System.out.println(a|b);//3
//操作^
System.out.println(a^b);//1
//操作~
System.out.println(~a);//-3
}
}
/*
00000000 00000000 00000000 00000010 int 2补码
00000000 00000000 00000000 00000011 int 3补码
//操作& 遇0则0 任意整数&1==0 一定是偶数
//任意整数&正数 一定是正数
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
------------------------------------
00000000 00000000 00000000 00000010 2
//操作| 遇1则1 任意整数|0 一定是本身
//任意整数|负数 一定是负数
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
-----------------------------------
00000000 00000000 00000000 00000011 3
//操作^ 相同则0不同则1 任意整数^0 一定是本身
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
------------------------------------
00000000 00000000 00000000 00000001 1
//操作~
//所有位按位取反
00000000 00000000 00000000 00000010
-----------------------------------
11111111 11111111 11111111 11111101 负数 补码
11111111 11111111 11111111 11111100 反码
10000000 00000000 00000000 00000011 原码 -3
*/
*
位运算符
>>(右移)、<<(左移)、>>>(无符号右移)
>>(右移):当正数进行右移时,右移几位就在最 左边位(最高位)补上几个0。当负数进行右移时, 右移几位就在最高位补上几个1。 <<(左移):无论正负数进行左移时,左移几位就在 最低位补上几个0。
>>>(无符号右移):无论正负数进行右移时,右移几位 就在最高位补上几个0。
class WeiSuanDemo2{
public static void main(String[] args) {
int a=12;
//操作>> a/2`移动位数
System.out.println(a>>2);//3
//操作<< a*2`移动位数
System.out.println(a<<2);//48
//操作>>> 结果一定是正数
System.out.println(a>>>2);//3
}
}
/*
00000000 00000000 00000000 00001100 int 12补码
//操作>> 2
[00]00000000 00000000 00000000 000011(00)
-----------------------------------
00000000 00000000 00000000 00000011 3
//操作<< 2
(00)000000 00000000 00000000 00001100[00]
------------------------------------
00000000 00000000 00000000 00110000 48
//操作>>> 2
[00]00000000 00000000 00000000 000011(00)
-----------------------------------------
00000000 00000000 00000000 00000011 3
*/
*/
/* 按位异或的扩展结论(当一个整数按位异或上另 一个整数两次结果还是本身)
*/
class WeiText1{
public static void main(String[] args) {
int a=2;
int b=5;
System.out.println(a^a^b);//5
System.out.println(b^a^b);//2
}
}
/* 需求:两个数值交换
效率高低:按位异或(整数)、求和(一般是整数)、中间变量(常用 任意数据、简单)
*/
class WeiText2{
public static void main(String[] args) {
//定义变量
int a=4;
int b=5;
//
System.out.println("a的值:"+a+",b的值:"+b);
/*//1.中间变量
int temp=a;
a=b;
b=temp;
//
System.out.println("a的值:"+a+",b的值:"+b);*/
//2.按位异或
/*a=a^b;
b=a^b;//b=a^b^b=a
a=a^b;//a=a^b^a=b
//
System.out.println("a的值:"+a+",b的值:"+b);*/
//3.求和
a=a+b;
b=a-b;//b=a+b-b=a
a=a-b;//a=a+b-a=b
//
System.out.println("a的值:"+a+",b的值:"+b);
}
}
三目(元)运算符
/* ~a(一元) a+b(二元) 三目(元)运算符(结果一定是一个值) 格式
布尔表达式?表达式值1:表达式值2;
流程
先去计算出布尔表达式的值,如果是true返回
表达式值1,如果是false返回表达式值2.
*/
class SanMuDemo{
public static void main(String[] args) {
//求两个整数的最大值
/*int a=1;
int b=2;
//把三目返回值赋值给新变量
//两个表达式值得类型要小于等于接收值的类型
int max=a>b?'a':b;
System.out.println(max);*/
//求三个整数最大值
int a=1;
int b=2;
int c=3;
//三目嵌套
System.out.println(a>b?(a>c?a:c)
:(b>c?b:c));
}
}
() ~ ++ – ! * / % + - << >> >>> 关系 逻辑 & | ^ 三元 赋值 |