int n = 5, post = 1, pre = 1; pre = ++n + pre; // 运算结束后 pre 为 7,n 为 6 n = 5; post = n++ + post; // 运算结束后 post 为 6,n 为 6
上例中,++n 的值等于 n 自增后的值,即 6,所以 pre 最后得到的值为 7。n++ 的值等于 n 自增前的值,即 5,所以 post 最后得到的值为 6。
位移运算
1 2 3 4 5 6 7 8 9
int n=7;//00000111=7 int a=n<<1;//00001110=14 int b=n>>1;//00000011=3 //对于负数 int n = -536870912; int a = n >> 1; // 11110000 00000000 00000000 00000000 = -268435456 //'>>>/<<<' int n = -536870912; int a = n >>> 1; // 01110000 00000000 00000000 00000000 = 1879048192
仔细观察可发现,左移实际上就是不断地×2,右移实际上就是不断地÷2。
位运算
位运算是按位进行与、或、非和异或的运算。
与运算的规则是,必须两个数同时为1,结果才为1:
1 2 3 4
n = 0 & 0; // 0 n = 0 & 1; // 0 n = 1 & 0; // 0 n = 1 & 1; // 1
或运算的规则是,只要任意一个为1,结果就为1:
1 2 3 4
n = 0 | 0; // 0 n = 0 | 1; // 1 n = 1 | 0; // 1 n = 1 | 1; // 1
非运算的规则是,0和1互换:
1 2
n = ~0; // 1 n = ~1; // 0
异或运算的规则是,如果两个数不同,结果为1,否则为0:
1 2 3 4
n = 0 ^ 0; // 0 n = 0 ^ 1; // 1 n = 1 ^ 0; // 1 n = 1 ^ 1; // 0
publicclassMain{ publicstaticvoidmain(String[] args){ String s = """ SELECT * FROM users WHERE id > 100 ORDER BY name DESC """; System.out.println(s); } }
输入
和输出相比,Java的输入就要复杂得多。
我们先看一个从控制台读取一个字符串和一个整数的例子:
1 2 3 4 5 6 7 8 9 10 11 12
import java.util.Scanner;
publicclassMain{ publicstaticvoidmain(String[] args){ Scanner scanner = new Scanner(System.in); // 创建Scanner对象 System.out.print("Input your name: "); // 打印提示 String name = scanner.nextLine(); // 读取一行输入并获取字符串 System.out.print("Input your age: "); // 打印提示 int age = scanner.nextInt(); // 读取一行输入并获取整数 System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化输出 } }