这一章比较简单不多啰嗦。
1、算数运算符
说明
除号/
,如果10/3结果是整型不是浮点型。
对一个数据取模,比如a % b
,等同于a - a / b * b
或者可以这么认为,取模的符号和左边的数相互一致:
7 % 3 = 1;-7 % 3 = -1;7 % -3 = 1
经典习题
i = 10;
i = i++;
System.out.println(i);
复制代码
2、关系运算符
关系运算符的结果都是boolean类型,要么是true,要么是false。
3、逻辑运算符
逻辑与&
,逻辑或|
,逻辑异或^
。
短路与&&
,短路或 ||
,取反!
。
短路&&,只要第一个为false那后面不判断,短路或||,只要后面有一个为true后面不判断。
public static void main(String[] args) {
int x = 5;
int y = 5;
if (x++== 6 & ++y== 6){
}
System.out.println("x = " + x + " y = " + y);
}
//x = 6;y = 6
public static void main(String[] args) {
int x = 5;
int y = 5;
if (x++== 6 && ++y== 6){
}
System.out.println("x = " + x + " y = " + y);
}
//x = 6;y = 5
复制代码
4、赋值运算符
下面这些都是赋值运算符:
int a = 10;
a += 1;
a -= 1;
复制代码
赋值运算符会进行类型转换:
byte a = 2;
a += 1;
//上面这个等价于 a = (byte)(a+1);
复制代码
5、三元运算符
条件表达式 ? 表达式 1: 表达式 2;
为true执行表达式1,false执行表达式2。
public static void main(String[] args) {
int a = 10;
int b = 99;
int result = a > b ? a++ : b++;
System.out.println("result=" + result);
System.out.println("a=" + a);
System.out.println("b=" + b);
}
复制代码
题目:计算三个数中最大的那个
public static void main(String[] args) {
int num1 = 270;
int num2 = 25;
int num3 = 104;
int bigNum1 = num1 > num2 ? num1 :num2;
int max = bigNum1 > num3 ? bigNum1 : num3;
System.out.println("最大的数是:" + max);
//或者
int max = (num1 > num2 ? num1 : num2) > num3 ? (num1 > num2 ? num1 : num2) : num3;
System.out.println("最大的数是:" + max);
}
复制代码
6、位运算符
算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
算术左移 <<: 符号位不变,低位补 0
逻辑右移 >>>:也叫无符号右移,运算规则是: 低位溢出,高位补 0
7、运算符的优先级
其中最需要注意的就是:逻辑与、逻辑或、逻辑非的优先级
逻辑非 > 逻辑与 > 逻辑或
//好好看这个例子
boolean s1 = true,s2 = true,s3 = false;
System.out.println(s1 || s2 && s3);//true
复制代码
8、进制换算
常用的进制的符号:
- 十进制就是直接写即可
- 八进制要求以0开头,比如:015
- 十六进制:0x开头,比如:0x15
- 二进制:要求0b或0B开头,比如0b11011
其他细节:
- 其他进制转换成十进制,按照每一位进行计算,最后一位是进制的0次方,依次往前算
- 十进制转换成其他进制,拿这个数除以换算的进制,取余数并且反向输出即可
- 二进制转八进制,每3位一组去计算即可
- 二进制转十六进制,每4位一组去计算
- 八进制转二进制:八进制每一位都换成二进制的三位
- 十六进制转二进制:同上,变成一位变四位