第四章 运算符(P063-P103)¶
1、算数运算符¶
% 取模,取余
本质:公式:a % b = a - a / b * b
a % b 当 a 是小数时,公式 = a - (int) a / b * b
2、 & 逻辑与 && 短路与¶
- && 短路与:如果第一个条件为 false,则第二个条件不会判断,最终为 false,效率高。
- & 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低。
- 开发中,我们使用的基本是短路与 &&,效率高。
3、| 逻辑或 || 短路或¶
- || 短路或:如果第一个条件为true,则第二个条件不会判断,最终为true
- | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低。
4、键盘输入语句¶
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java,需要一个扫描器(对象),就是Scanner
步骤:
- 导入该类的所在包,java.util.Scanner
- 创建该类对象(声名变量)
- 调用里面的功能
import java.util.Scanner; public class Input { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);//创建对象接收类 System.out.println("请输入名字"); String name = scanner.next();//接受用户输入 System.out.println("请输入年龄"); int age = scanner.nextInt();//接受用户输入 System.out.println("请输入薪水"); double sal = scanner.nextDouble();//接受用户输入 } }接受字符语句:
char sex = scanner.next().charAt(0);
5、进制转换¶
- 二、八,十六进制转换为十进制
从最低位(右边)开始,将每个位上的数提取出来,乘以 2/8/16 的(位数 - 1)次方
- 十进制 转 二、八、十六进制
将该数不断除以 2/8/16 ,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二、八、十六进制
十转二
十转八
十转十六
- 二进制转八进制
从低位开始,将二进制数每三位一组,转成对应的八进制数计科
- 二进制转十六进制
从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
- 八进制转二进制
将八进制数每 1 位,转成对应的一个 3 位的二进制数即可
- 十六进制转二进制
将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可
6、位运算¶
-
原码、反码、补码(重难点)¶
- 二进制的最高位十符号位:0 表示正数,1 表示负数( 0 -> 0 1 -> -)
- 正数的原码,反码,补码都一样(三码合一)
- 负数的反码 = 它的原码符号位不变,其他位取反( 0 -> 1, 1 -> 0)
- 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1
- 0 的反码/补码都是 0
- java 中没有无符号数,换而言之,Java 中的数都是有符号的
- 在计算机运算的时候,都是以==补码的方式来运算==的
- 当我们看运算结果的时候,要看他的原码
-
位运算符¶
Java 中有7个位运算( &、|、^、~、>>、<<、>>>)
- & 按位与
两位全为 1 ,结果为 1 ,否则为 0
- | 按位或
两位有一个为 1 ,结果为 1 ,否则为 0
- ^ 按位异或
两位一个为 0 ,一个为 1 ,结果为 1 ,否则为 0
- ~ 按位取反
0 -> 1 , 1 -> 0
~2 = ?
2 的原码 00000000 00000000 00000000 00000010
2 的补码 00000000 00000000 00000000 00000010
~ 2的补码 11111111 11111111 11111111 11111101
~ 2的原码 10000000 00000000 00000000 00000010
所以 ~2 = -2
2&3 = ?
2 的原/反/补码 00000000 00000000 00000000 000000010
3 的原/反/补码 00000000 00000000 00000000 000000011
2 & 3 补码 11111111 11111111 11111111 11111110
2 & 3 原码 10000000 00000000 00000000 00000001
所以 2 & 3 = -1
- 算数右移 >>
低位溢出,符号位不变,并用符号位补溢出的高位
右移一位等价 -> X / 2
- 算数左移 <<
符号位不变,低位补 0
左移一位等价 -> X * 2
- 逻辑右移/无符号右移 >>>
低位溢出,高位补 0
没有 <<< 符号






