1、算术运算符
基本四则运算符: + - * \ %
(1)规则比较简单,需要注意的是除法:
① int / int 的结果还是 int,要想结果中有小数需要使用 double 类型
② 0 不能用来做除数
(2)在Java中,% 表示取余,不仅可以对 int 求模,也可以对 double 求模
System.out.println(11.5 % 2.0);
//运行结果 : 1.5
①增量赋值运算符 += 、-=、*=、/=、%=
int a = 10;
a += 1;// 等价于 a = a+1
System.out.println(a);
//运行结果: 11
② 自增/自减 运算符 : ++ - -
int a = 10;
int b = ++a;
System.out.println(b);
int c = a++;
System.out.println(c);
// 运行结果: 11 11
注意:
1)如果不取自增表达式的返回值,则前置自增和后置自增 没区别;
2)如果取表达式的返回值,则
前置自增 (++a)的返回值是自增之后的值:
int a = 10;
int b = ++a;
return b; // b = 11 , a = 11
后置自增 (a++)的值是自增之前的值:
int a = 10;
int b = a++;
return b; // b = 10 , a = 11
2、关系运算符:
主要有6个: ==、!=、<、>、<=、>=
注意:*
关系运算符的表达式 返回值 都是 boolean 类型
int a = 10;
int b = 20;
System.out.println(a == b);
System.out.println(a != b);
// 运行结果: false
// true
3、逻辑运算符:
主要有三个: &&、||、!
注意:*
逻辑运算操作数和返回值都是 boolean 类型
(1)逻辑与 &&
规则: 两个操作数都为 true , 结果为 true ,否则结果为 false
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);
//运行结果: true
**如果 左侧表达式值为 false ,则表达式整体一定为 false ,无需计算右侧表达式
System.out.println(10 > 20 && 20 < 30);
//运行结果: false
(2)逻辑或 ||
规则: 两个操作数都为 false, 结果为 false, 否则结果为 true
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b || a < c);
//运行结果: true
**如果 左侧表达式值为 true ,则表达式整体一定为 true ,无需计算右侧表达式
System.out.println(10 < 20 || 10 / 0 == 0);
//运行结果: true
(3)逻辑非 !
规则: 操作数为 true, 结果为 false; 操作数为 false, 结果为 true(这是个单目运算符, 只有一个操作数).
int a = 10;
int b = 20;
System.out.println(!(a<b));
//运行结果: false
4、位操作符
主要有四个: & 、 | 、 ^ 、~
位操作 表示 按二进制位计算,计算机中都是用二进制来表示数据的(01构成的序列),按位运算就是按二进制的每一位进行计算.
(1)按位与 &
如果两个二进制位 全为1,则结果位1, 否则结果为 0
int a = 10;
int b = 20;
System.out.println(a & b);
// 运行结果: 0
先把10 和 20转成二进制 ,分别为 1010 和 10100
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200925115430785.png#pic_center)
(2)按位或 |
如果两个二进制位 都是 0, 则结果为 0, 否则结果为 1.
注意: *
当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算.
int a = 10;
int b = 20;
System.out.println(a | b);
// 运行结果: 30
先把10 和 20转成二进制 ,分别为 1010 和 10100
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200925120745342.png#pic_center)
(3)按位取反 ~
如果该位为 0 则转为 1, 如果该位为 1 则转为 0
int a = 0xf;
System.out.printf("%x\n", ~a);
//运行结果: fffffff0
- 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4 个二进制位。
- 0xf 表示 10 进制的 15, 也就是二进制的 1111
- printf 能够格式化输出内容, %x 表示按照十六进制输出
(4)按位异或 ^
如果两个数的二进制位相同,则结果为0,相异则为 1
int a = 0xa;
int b = 0xc;
System.out.printf("%x\n",a^b);
//运行结果: 6
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200925122839952.png#pic_center)
5、移位运算:
移位运算符: <<、 >>、 >>>
都是按照二进制来计算
注意:*
输入的是十六进制,输出的也是十六进制
(1)左移 << : 最左侧的不要了,最右边补0
int a = 0x10;
System.out.printf("%x\n",a<<1);
//运行结果: 20
(2)右移 >>:最右侧的不要了,最左边补0(正数补0,负数补1)
int a = 0x10;
System.out.printf("%x\n",a>>1);
//运行结果: 8
(3)无符号右移 >>>: 最右侧位不要了, 最左侧补 0.
int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 运行结果 7fffffff
6、条件运算符:(三目运算符)
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println(max);
//运行结果: 20