JavaSE初学---运算符
JavaSE初学---运算符
- 什么是运算符
- 一、算术运算符
- 1. 基本四则运算符:加减乘除模(+ - * / %)
- 2. 增量运算符 += -= *= %=
- 3.⾃增/⾃减运算符 ++ --
- 二、关系运算符
- 三、逻辑运算符
- 1.&&
- 2.||
- 3.!
- 4.短路求值
- 四、位运算符
- 1. 按位与 &
- 2.按位或 |
- 3.按位取反 ~
- 4.按位异或 ^
- 五、移位运算
- 1.左移 <<
- 2.右移 >>
- 3.⽆符号右移 >>>
- 六、条件运算符
什么是运算符
用来对变量、常量、数值进行运算、比较、逻辑判断的特殊符号。
一、算术运算符
1. 基本四则运算符:加减乘除模(+ - * / %)
inta=200;intb=4;//a+b.sout快速生成System.out.println(a + b);//.前面的内容就是System.out.println();中括号的内容System.out.println(a+b);System.out.println(a-b);System.out.println(a*b);System.out.println(a/b);System.out.println(a%b);//取余注意:
(1)都是⼆元运算符,使⽤时必须要有左右两个操作数
(2)int / int 结果还是int类型,⽽且会向下取整
inta=3;intb=2;// 在数学中应该是1.5 但是在Java中输出结果为1 会向下取整,即⼩数点之后全部舍弃掉了System.out.println(a/b);// 要得到数学中的结果,可以使⽤如下⽅式doubled=a*1.0/b;System.out.println(d);(3)做除法和取模时,右操作数,即除数不能为0
(4)Java取余,只看被除数正负
System.out.println(10%3);//1System.out.println(10%-3);//1System.out.println(-10%3);//-1System.out.println(-10%-3);//-12. 增量运算符 += -= *= %=
inta=1;System.out.println(a+=2);//相当于 a = a + 2,输出3System.out.println(a-=1);//相当于 a = a - 1,输出2System.out.println(a*=3);//相当于 a = a * 3,输出6System.out.println(a/=3);//相当于 a = a / 3,输出2System.out.println(a%=3);//相当于 a = a % 2,输出2注意:
增量运算符在计算的时候,可以不进⾏强制类型转换(数据范围⼤的到数据范围⼩的)
doublea=10.4;intb=10;b+=a;//不会报错b=b+a;//此时会编译报错,等号右边被提升为了double类型3.⾃增/⾃减运算符 ++ –
++是给变量的值+1,–是给变量的值-1
inta=1;intb=5;System.out.println(a++);//后置++表⽰给a的值加1,此时a的值为2System.out.println(++b);//前置++是先给变量+1,然后使⽤变量中的值,因此输出6//--与++一样二、关系运算符
关系运算符主要有六个: == != < > <= >= ,其计算结果是 true 或者 false
inta=10;intb=20;// Java中 = 表⽰赋值,要与数学中的含义区分在Java中 == 表⽰相等System.out.println(a==b);// falseSystem.out.println(a!=b);// trueSystem.out.println(a<b);// trueSystem.out.println(a>b);// falseSystem.out.println(a<=b);// trueSystem.out.println(a>=b);// false三、逻辑运算符
逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型
1.&&
(1)语法规则:表达式1 && 表达式2,左右表达式必须是boolean类型的结果
(2)相当于“且”
(3)两个表达式都为真,结果才是真,只要有⼀个是假,结果就是假
inta=1;intb=2;System.out.println(a==1&&b==2);// 左为真 且 右为真 则结果为真System.out.println(a==1&&b>100);// 左为真 但 右为假 则结果为假System.out.println(a>100&&b==2);// 左为假 但 右为真 则结果为假System.out.println(a>100&&b>100);// 左为假 且 右为假 则结果为假2.||
(1)语法规则:表达式1 || 表达式2,左右表达式必须是boolean类型的结果。
(2)相当于或
inta=1;intb=2;System.out.println(a==1||b==2);// 左为真 且 右为真 则结果为真System.out.println(a==1||b>100);// 左为真 但 右为假 则结果也为真System.out.println(a>100||b==2);// 左为假 但 右为真 则结果也为真System.out.println(a>100||b>100);// 左为假 且 右为假 则结果为假3.!
(1)语法规则:! 表达式
(2)相当于不是
inta=1;System.out.println(!(a==1));//a是等于1,加上!结果为假4.短路求值
System.out.println(10>20&&10/0==0);// 打印 falseSystem.out.println(10<20||10/0==0);// 打印 true在一、1.的注意(3)中就提到过做除法和取模时,右操作数,即除数不能为0
但是上⾯的代码却能正常运⾏, 说明 10 / 0 并没有真正被求值
注意:
(1)对于 && , 如果左侧表达式值为 false, 则表达式结果⼀定是 false, ⽆需计算右侧表达式
(2)对于 ||, 如果左侧表达式值为 true, 则表达式结果⼀定是 true, ⽆需计算右侧表达式.
(3)& 和 | 如果表达式结果为 boolean 时, 也表⽰逻辑运算. 但与 && || 相⽐, 它们不⽀持短路求值.
System.out.println(10>20&10/0==0);//程序抛出异常System.out.println(10<20|10/0==0);// 程序抛出异常四、位运算符
位运算符主要有四个: & | ~ ^ ,除 ~ 是⼀元运算符外,其余都是⼆元运算符
(位操作表示按⼆进制位运算,计算机中都是使用⼆进制来表示数据的(01构成的序列), 按位运算就是在按照⼆进制位的每⼀位依次进行计算)
1. 按位与 &
如果两个⼆进制位都是 1, 则结果为 1, 否则结果为 0
(只要对应位上有0,则该位下来的结果就为0)
inta=10;intb=20;//进⾏按位运算, 需要先把 10 和 20 转成⼆进制, 分别为 1010 和 10100System.out.println(a&b);//02.按位或 |
如果两个⼆进制位都是 0, 则结果为 0, 否则结果为 1
(只要对应位上有1,则该位下来的结果就为1)
inta=10;intb=20;System.out.println(a|b);//303.按位取反 ~
如果该位为 0 则转为 1, 如果该位为 1 则转为 0
(按位取反公式:~x = -x - 1)
intc=15;System.out.println(~c);//-16Java 中 int 是 32 位有符号整数
15 的完整 32 位二进制:
00000000 00000000 00000000 00001111
全部取反后:
11111111 11111111 11111111 11110000
补码减 1:11111111 … 11101111
按位取反得到原码:00000000 … 00010000 = 16
加上负号:-16
4.按位异或 ^
如果两个数字的⼆进制位相同, 则结果为 0, 相异则结果为 1
inta=10;intb=20;System.out.println(a^b);//30五、移位运算
移位运算符有三个: << >> >>> ,都是⼆元运算符,且都是按照⼆进制⽐特位来运算的
1.左移 <<
最左侧位不要了, 最右侧补 0
inta=10;System.out.println(a<<1);//202.右移 >>
最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
inta=10;System.out.println(a>>1);//5inta=-10;System.out.println(a>>1);//-53.⽆符号右移 >>>
最右侧位不要了, 最左侧补 0
inta=10;System.out.println(a>>>1);//5六、条件运算符
表达式1 ? 表达式2 : 表达式3
(当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值
当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值)
inta=10;intb=20;intmax=a>b?a:b;//20注意:
(1) 表达式2和表达式3的结果要是同类型的,除⾮能发⽣类型隐式类型转换
(2)表达式不能单独存在,其产⽣的结果必须要被使⽤
