一.算术运算符
1.基本四则运算符:加减乘除(+-*/%)
int a=20;
int b=10;
System.out.println(a+b); //30
System.out.println(a-b); //10
System.out.println(a*b); //200
System.out.println(a/b); //2
System.out.println(a%b); //0 (模运算相当于数学除法中的余数
int / int 结果还是int,会向下取整
除有下面一些情况
System.out.println(5/2); //2
System.out.println((float)5/2); //2.5
System.out.println(5/(float)2); //2.5(int和float运算时,float数据类型较大,发生隐式转换)
System.out.println((float)(5/2)); //2.0
System.out.println(10%3); //1
System.out.println(10%-3); //1 (商是-3,余1)
System.out.println(-10%3); //-1 (商是-3,余-1)
System.out.println(-10%-3); //-1 (商是3,余-1)
System.out.println(11.5%2); //1.5
做除法和取模时,右操作数不能为0;
两侧操作数不一样时,向类型大的提升
System.out.println(1+0.2); //提升为double 输出1.2
2.增量操作符(+= -= *= %=)
这种运算符操作完成后,会将操纵的结果赋值给左操作数
这种操作符当遇到数据类型不同时,会自动强制转换成匹配的类型
3.自增/自减运算符++ --
++是给变量的值+1
--是给变量的值-1
二.关系运算符
关系运算符主要有六个== , != , <, >, <= , >=,其计算结果是true或者false
int a =10;
int b =20;
三.逻辑运算符
逻辑运算符主要有三个:&& , || , !
运算结果都是boolean
1. 逻辑与&&
int a=1;
int b=2;
System.out.println(a==1 && b==2); //左为真 且右为真 则结果为真
2.逻辑或||
全假为假,有真为真
3.逻辑非!
逻辑非只能用在布偶表达式中
4.短路求值
&&和||遵守短路求值的规则.
System.out.println(10 > 20 && 10/0 == 0); //打印false
System.out.println(10 < 20 || 10/0 == 0); //打印true
这里10/0可以正常运行没用报错,说明这个算式并没用运行
注:
对于&&,如果左值表达式为false,则表达式结果一定是false,无需计算右侧表达式。
对于||,如果左值表达式为true,则表达式结果一定是true,无需计算右侧表达式。
&和|如果表达式结果为boolean时,也表示逻辑运算,但与&& || 相比,他们不支持短路求值
System.out.println(10 > 20 & 10/0 == 0); //程序抛出异常
System.out.println(10 > 20 | 10/0 == 0); //程序抛出异常
四.位运算符
1.按位与&
对应位上都是1,就为1,否则为0
int a=10;
int b=20;
System.out.println(a & b);
2.按位或|
对应位上都是0,就为0,否则为1
int a=10;
int b=20;
System.out.println(a | b);
注:当&和|的操作数为整数(int ,short ,long ,byte) 的时候,表示按位运算,当操作数为boolean的时候,表示逻辑运算.
3.按位取反~
如果该位为0,则转为1,如果该位为1则转为0
int a=0xf;
System.out.printf("%x\n",~a)
printf能够格式化输出内容,%x表示按照十六进制输出
\n表示换行符
十六进制
1.0x前缀的数字为十六进制数字.十六进制可以看成是二进制的简化表示方法。一个十六进制数字对应4个二进制位
2.abcdef分别代表十进制中的10,11,12,13,14,15
4.按位异或^
如果两个数字二进制位相同,则结果为0,相异则结果为1
注:
n^n=0 0^n=n.
五.移位运算
都是按照比特位来运算的
1.左移<<
最左侧不要了,最右侧补0
注:向左移位时,丢失的是符号位,因此正数左移可能会变成负数
相当于乘法,左移n位,乘2的n次方
2.右移>>
最右侧不要了,最左侧补符号位,符号位是1补1是0补0
相当于除法,右移n位,/2的n次方
六.条件运算符
注意:
表达式2和表达式3的结果要是同类型的,除非能发生隐式类型转换
表达式不能单独存在,其产生的结果必须要被使用
七.运算符的优先级
运算符是有优先级的,不必记忆,加()就完了