目录
运算符
概念 : 被指定了运算规则的符号
分类 :
算术运算符 :
+(求和) -(求差) *(求积)
应用场景 :
1*输出语句对字面值直接使用
2*输出语句中对变量运算
3*将运算的结果保存在变量
结果数据类型的问题 :
1*结果数据类型和运算元素中大类型保持一致
例 : double a = b(int)+c(double)
2*byte short char 参与运算时,会自动提升为int类型
byte b1 = 3;
byte b2 = 4;
byte sum = b1+b2;
编译会报错,如何改错?
1*强制类型转换
byte sum = (byte)(b1+b2);
2*修改结果数据类型
int sum = b1 + b2 ;
但是:
byte sum2 = 3+4;编译不会报错
原因 :
1*编译期间只校验变量类型,不确定变量的值
2*编译期间进行优化,对于字面值会在编译期由虚拟机进行运算,所以以上程序编译之后
byte sum1 = 7;并检查7在不在byte的范围之内,如果超出范围,编译报错
/(求商运算)
System.out.println(6/4);//1
1*int/int结果必然为int类型 只取整数部分
2*除数为0的情况 : 被除数为整型,编译不会报错,运行会抛出异常
被除数为正浮点数 :
System.out.println(2.0/0);//Infinity无穷大
System.out.println(0/0); //NaN--not a number 非数字
System.out.println(-2.0/0);//-Infinity无穷小
%(取余)
应用场景
整数--余数为0
奇偶数--对2进行取余运算 判断余数是否为0
1 2 3...10 hash随机散列
分成3组 每组的个数尽量均衡
num%3 结果 0 1 2
++ (自增运算符) --(自减运算符)
int x = 2;
让x变量的值+1
x = ++x;
应用场景 : 作用于变量,不能应用字面值或者常量
常量 : x++;<=>(type)(x+1)
考虑++可能会超出范围从而得到错误的数据值
++可以在变量前也可以在变量后
变量在前,++在后,则先使用变量的值参加运行 再让变量+1
++在前,变量在后,则先让变量的值自加1,再参与运算
注意 : 实际开发中最好不要写太复杂的表达式,会降低程序的可读性
赋值运算符 :
= : 最基本的赋值运算符,优先级最低;不表示相等或不相等,只用来赋值
+= : a+=b<=>a=(type)(a+b)
a只能是变量,不能是常量或字面值
关系运算符 :
< > >= <= != ==
执行结果必然是boolean true 或false
逻辑运算符 :
&(且) |(或) ^(异或) !(非 取反)
&&(双与 短路与) ||(双或 短路或)
针对boolean类型的值来做运算的,结果也还是boolean类型的值
& : 要求两个条件同时成立,结果才成立
x&y: x的取值要么为true 要么为false
true&false= false
true&true= true
false&true= false
false&fasle= false
总结 : 全true为true 有一个false,结果就为false
| :
x|y: x的取值要么为true 要么为false
true|false= true
true|true= true
false|true= true
false|fasle= false
总结 : 全false为false 有一个true,结果就为true
! :
x=true !x=false
y=false !y=true
^ :
x^y: x的取值要么为true 要么为false
true^false= true
true^true= false
false^true= true
false^fasle= true
总结 : 俩元素相同为false,不同则为true
&& :
false&&(1+2+...+100000000>164686516)=false
总结 :
&&左边为false时,右边不再执行,结果必然为false
&&左边如果为true,则效果等同于&
|| :
总结 :
||左边为true时,右边不再执行,结果必然为true
||左边如果为false,效果同|
三目运算符(三元表达式) :
单目 : 一元 x++ !x
双目 : 二元 x+y x&y
格式 : 表达式或值? 表达式1或值1 : 表达式2或值2
要求 : ?前表达式或值必须为boolean类型
执行流程:
1*执行表达式或值
true : 表达式1或值1
false : 表达式2或值2
案例 :
判断num的奇偶性
int a = 5;
int b = 10;
int c = 15;
System.out.println(a % 2 == 0 ? "偶数" : "奇数");
System.out.println(a % 5 == 0 ? "ok" : "不ok");
System.out.println(a >b ? "a" : "b");
System.out.println(a >b ? a>c?a:c : b>c?b:c);
位运算符 :
了解即可, 为了在源代码中能看懂 实际开发使用较少
整型来做运算 : 基于整数的二进制形式做运算
&(按位与) |(按位或) ~(按位取反) ^(按位取反)
<<(按位左移) >>(按位右移) >>>(按位无符号右移)
x&y 例如
1&2=0
按位与
转为2进制 : 整数字面默认为int int占四个字节 32位二进制
最高位 : 最右边位 符号位
1|2=3
按位或
1|1或1|0或0|1=1 0|0=0
~(按位取反)
~x 例如 ~1=-2
~1=0 ~0=1
~i = -(i+1)
<<(按位左移)
x<<y 将x的二进制整体左移y位,左侧多出来的直接舍弃 右侧空出来的补0
x<<y <==> x*2^y
>>(按位右移)
x>>y 将x的二进制整体右移y位 右侧多出来的直接舍弃 左侧空出来的补和符号一致的数字
x>>y <==> x/2^y
x>>>y(按位无符号右移)
将x的二进制整体右移y位 右侧多出来的直接舍弃 左侧空出来的补0
总结:
运算符
算术运算符
+-*/ % ++ --
赋值运算符
= += -= &= |=
关系运算符
< > <= >= == !=
逻辑运算符
& | ! ^ && ||
三目运算符