目录
一:什么是运算符
二:算术运算符
1.基本四则运算符:加减乘除模(+、-、*、/、%)
2.增量运算符(+=、-=、*=、%=)
3.自增/自减运算符(++、--)
三:关系运算符
四:逻辑运算符(重点)
五:位运算符
六:移位运算符
七:条件运算符
八:运算符的优先级
一:什么是运算符
对操作数进行操作的符号,不同运算符操作的含义不同。
二:算术运算符
1.基本四则运算符:加减乘除模(+、-、*、/、%)
(1)都是二元运算符,使用时必须要有左右两个操作数
(2)int/int 结果还是int类型,而且会向下取整
(3)做除法和取模时,右操作数不能为0,会算术异常报错
System.out.println(1/0) ;//error System.out.println(1%0) ;//error
(4)%不仅可以对整型取模,也可以对double类型取模
System.out.println(12.5%2.0) ;//2.5
(5)当两侧操作数不一样是,会向类型大的提升
System.out.println(1+1.1) ;//会提升为double类型
2.增量运算符(+=、-=、*=、%=)
该运算符可以帮我们进行类型转换,将操作的结果赋值给左操作数
int a=10; a=(int)(a+1.1);//a+1.1为double,但是a为int类型,需要强制转换为int a+=1.1;//增量运算符可以自动转换为类型大的,不需要转换
3.自增/自减运算符(++、--)
(1)++是给变量的值+1,--是给变量-1
(2)如果单独使用,【前置++】和【后置++】没有任何区别
(3)如果混合使用,【前置++】先+1,然后使用变量+1之后的值;【后置++】先使用原来变量的值,表达式结束时给变量+1
int a=1; a++;//a=2 System.out.println(a++);//后置++,先使用,输出2,即a=2,然后+1 System.out.println(a);//a=3
三:关系运算符
(1)关系运算符有6个,==,!=,<,>,<= ,>=
(2)在Java当中,=表示赋值,==表示相等
(3)当需要多次判断是,不要连着写,比如:3<a<5(×)。当a=2时,3<a为false,false<5不能比
四:逻辑运算符(重点)
逻辑运算符有三个:&&,||,!,运算结构都是boolean类型
(1)逻辑与&&:表达式1&&表达式2,左右表达式必须是boolean类型
两个表达式都是真,结果才为真,只要一个为假,结果就是假
(2)逻辑或||:表达式1&&表达式2,左右表达式必须是boolean类型
左右表达式至少有一个为真,则结果为真
(3)逻辑非!:!表达式
真变假,假变真
(4)短路求值
System.out.println(1>2&&1/0==0);//打印false //对于&&:表达式1为假,就不会执行表达式2了 System.out.println(1<2&&1/0==0);//打印true //对于||:表达式1为真,就不会执行表达式2了 //&和|如果表达式结果为boolean时,也表示逻辑运算,但与&& ||相比时,他们不支持短路求值
五:位运算符
数据操作的最小单位是比特,最小的存储单位是字节
位操作表示按二进制位运算,主要有4个:& ,|,~,^
(1)按位与&:如果两个二进制位都是1,则结果也为1,否则为0
(2)按位或|:两个二进制位都是0,则结果为0,否则结果为1
(3)按位取反~:0转1,1转0
int a=0xf;//表示16进制 ,f为十进制的15 System.out.printf("%x\n",a); System.out.printf("%x\n",~a);//用16进制打印 结果: f fffffff0
(4)按位异或^:两个数字的二进制位相同为0,相异为1
a^a=0 a^0=a
六:移位运算符
(1)左移<<:最左侧位不要了,最右侧补0【左移一位,相当于原数字*2】
向左移位时,丢弃的是符号位,因此正数左移可能会变成负数
(2)右移>>:最右侧位不要了,最左侧补符号位(正数补0,负数补1)【右移一位,相当于原数字/2】
(3)无符号右移>>>:最右侧位不要了,最左侧补0
(4)由于计算机计算移位效率高于计算乘除,当某个代码正好乘除2的N次方的时候可以用移位运算符代替
七:条件运算符
条件运算符(也称三目运算符)只有一个:表达式1?表达式2:表达式3
当表达式1的值为true时,整个表达式的值为表达式2的值
当表达式1的值为false时,整个表达式的值为表达式3的值
八:运算符的优先级
(1)运算符之间是有优先级的,具体的规则我们不必记忆,在可能存在歧义的地方加括号即可
(2)要注意的是:&&优先级高于||
System.out.println(10>3||10<3&&10<3);//true //加括号 System.out.println((10>3)||(10>3&&10<3));