目录
1算术运算符
1.1 基本的四则运算
1.2 增量赋值运算符和自增自减运算符
2 关系运算符
3 逻辑运算符
4位运算符
5.移位运算(了解即可)
6 条件运算符
7.小结
+ - * / %,这些都比较简单。值得注意的是除法。除法分为两种,一种是/ 一种是%
int a = 1;
int b = 2;
System.out.println(a / b);
// 结果为 0
因为这些都属于int类型,int/int还是int,如果想要准确的值 需要double来计算。
0不能作为除数,否则编译器会报错。
System.out.println(11.5 % 2.0);
// 运行结果
1.5
表示取余,可以对int和double类型的数取余数。
int a = 10;
a += 1; // 等价于 a = a + 1
System.out.println(a);
a+=1 等价于 a=a+1
int a = 10;
int b = ++a;
System.out.println(b);
int c = a++;
System.out.println(c);
这里要分辨的前置++和后置++,前者是先++再使用,后者是先使用,再++
关系运算符主要有六种 == != < > <= >=
int a = 10;
int b = 20;
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);
System.out.println(a >= b)
注意,这些关系运算符的返回值都是Boolean类型。
逻辑运算符主要有三个 分别是逻辑与 && 逻辑或|| 逻辑非
其中这些运算符的操作数与返回值都是boolean
逻辑与&&
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);
逻辑或||
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b||b
逻辑非 !
int a = 10;
int b = 20;
System.out.println(!a
这些都遵从短路求值,即在逻辑与中如果左侧表达式为false,贼整体一定为false,无需计算右侧表达式 。 在逻辑或中,如果左侧表达式为true,则整体一定为true,无需计算右侧表达式。
|和& 这两个也表示逻辑运算,但不支持短路求值,我们一般不推荐使用。
主要有四种位运算符,他们操作的是二进制位。分别是 & | ^ ~
按位与 &(如果两个二进制都是1,则结果是1,否则就是0)
int a = 10;
int b = 22;
System.out.println(a & b);
//在计算的时候首先转化为二进制 分别是1010和10100
// 10=>01010
// 20=>10110
// 则按位与以后为 00010
按位或| (如果两个二进制位都是0,则结果才为0,只要有一个1,则结果为1)
int a = 10;
int b = 22;
System.out.println(a | b);
//在计算的时候首先转化为二进制 分别是1010和10100
// 10=>01010
// 20=>10110
// 则按位或以后为11110
按位取反 ~,就是把每个二进制位的数字都取相反的值就行。
按位异或 ^ 即找不同,有不一样的就取1 否则就取0.
int a = 10;
int b = 22;
System.out.println(a ^b);
//在计算的时候首先转化为二进制 分别是1010和10100
// 10=>01010
// 20=>10110
// 则按位异或以后为 11100
移位运算有三个 << >> >>>
其中 左移 << 最左侧不要,右侧补0;数值就是移动后的值为 a*2^n
int a = 0x10;
System.out.printf("%x\n", a << 1);
// 运行结果(注意, 是按十六进制打印的)
20
右移 >> 右移分两种,一种是正数,很简单 。就最右侧不要了,最左侧补0.而负数,最右侧不要了,最左侧补1.
int a = -5;
int b= a>>1;
b=-3;
// 首先 将a转化为 二进制数 即 1101
// 再取a的补码 即为 1011
// 再右移一位 1101
// 转化为原码 1011
//此时 b=-3
无符号右移 >>>
最右侧不要了,最左侧补0;
int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 运行结果(注意, 是按十六进制打印的)
7fffffff
条件运算符只有一个 ,表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式 3 的值. 也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法。
// 求两个整数的最大值
int a = 10;
int b = 20;
int max = a >b?a:b;
此时 max=20