位运算符
~(按位取反):就是针对这个二进制数据,所有的0变1,1变0.
比如:
public class OperatorDemo1 {
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(a & b);//0
System.out.println(a | b);//7
System.out.println(a ^ b);//7
System.out.println(~b);//-5
}
}
b:00000000 00000000 00000000 00000100
~按位取反,得
(补码) 11111111 11111111 11111111 11111011
(反码) 11111111 11111111 11111111 11111010
(原码) 10000000 00000000 00000000 00000101
即为-5
"<<" 左移:左边高位舍弃,右边空出来的用0补齐。
">>" 右移:如果最高位是0,左边被移空的位就填入0;如果最高位是1,左边被移空的位就填入1。
">>>" 无符号右移
向左移动或向右移动,其实就是把数据增大或缩小2的制定次幂。
public class OperatorDemo2{
public static void main(String[] args) {
//<<左移
System.out.println(16<<2);
//16*2^2 = 64
//>>右移
System.out.println(16>>2);
//>>>无符号右移
System.out.println(16>>>2);
}
}
练习1:请用最高效率写出2乘以8这个式子。
public class OperatorDemo3 {
public static void main(String[] args) {
System.out.println(2<<3);
}
}
/*output:
16
*/
练习2:请把两个数据交换,int a = 10,int b =20。
public class OperatorDemo4 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int temp = a;
a = b;
b = temp;
System.out.println(" a = " + a);
System.out.println(" b = " + b);
}
}
/*output:
a = 20
b = 10
*/
练习2第二种方法:
使用^(位运算符)
特点:一个数据对同一个数据^(位运算两次),数据不变。
public class OperatorDemo5 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;//a ^ b ^ b = a
a = a ^ b;//a ^ a ^ b = b
System.out.println(a + "***" + b);
}
}
/*output:
a = 20
b = 10
*/
条件运算符(三元运算符)
表达式:
(条件表达式)?表达式1:表达式2;
//注意:条件表达式说明这里将来只能是结果为true或false的表达式。
如果表达式为true,则表达式1为结果;
如果表达式为false,则表达式2为结果。
public class OperatorDemo6 {
public static void main(String[] args) {
int x = 100;
int y = (x > 50) ? 100 : 200;
System.out.println(y);//output:100
//复杂点
int z = (x > 200) ? (y <40 ? 100 : 200) : (y > 100 ? 300 : 400);
System.out.println(z);//output:400
}
}
流程控制语句
- 顺序结构
- 选择结构
- 循环结构
选择结构:if语句
格式一:
if (条件表达式) {
语句体
}
//如果条件表达式返回值为true,则执行语句体;false则什么都不做。
可不可以不写{}呢?我们试一下:
public class IfDemo {
public static void main(String[] args) {
int x = 20;
if (x > 100)
System.out.println("Hello");
System.out.println("World");
}
}
/*
output:World
*/
运行结果证明if语句后不写{}可以运行,但它只能控制后面的第一条语句,如想控制多条,必须加{}。