1_Java语言基础(位运算符的基本用法1)(了解)
A:位运算符有哪些
&, |, ^, ~ , >>, >>>, <<
B:案例演示
位运算符的基本用法1
&,|,^,~ 的用法
&:有0则0
|:有1则1
^:相同则0,不同则1
~:按位取反
2_Java语言基础(位异或运算符的特点及面试题)(掌握)
A:案例演示
位异或运算符的特点
^的特点:一个数据对另一个数据位异或两次,该数本身不变。
B:面试题:
请自己实现两个整数变量的交换
注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
3_Java语言基础(位运算符的基本用法2及面试题)(了解)
A:案例演示 >>,>>>,<
>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
· >>>:无符号右移 无论最高位是0还是1,左边补齐0
最有效率的算出2 * 8的结果
class Demo1_Operator {
public static void main(String[] args) {
/*
* &,|,^,~ 的用法
* &:有0则0
* |:有1则1
* ^:相同则0,不同则1
* ~:按位取反
*/
System.out.println(6 & 3);//2
System.out.println(6 | 3);//7
System.out.println(6 ^ 3);//5
System.out.println(~6);//-7?
}
}
/*
110
&011
-----------
010
110
|011
-----------
111
110
^011
-----------
101
00000000 00000000 00000000 000001106的原码反码补码都是本身
11111111 11111111 11111111 11111001对6取反
-00000000 00000000 00000000 00000001
---------------------------------------
11111111 11111111 11111111 11111000反码
10000000 00000000 00000000 00000111原码(-7)
*/
class Demo2_Operator {
public static void main(String[] args) {
/*
* 位异或运算符的特点
* ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
*/
//System.out.println(5 ^ 10 ^ 10);
//System.out.println(5 ^ 10 ^ 5);
/*
* 请自己实现两个整数变量的交换(不需要定义第三方变量)
* 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
*/
int x = 10;
int y = 5;
//需要第三方变量,开发推荐用这种
/*int temp;
temp = x;
x = y;
y = temp;*/
//不需要定义第三方变量,有弊端,有可能会超出int的取值范围
/*x = x + y;//10 + 5 = 15
y = x - y;//15 - 5 = 10
x = x - y;//15 - 10 = 5*/
//不需要第三方变量,通过^来做
x = x ^ y;// 10 ^ 5
y = x ^ y;// 10 ^ 5 ^ 5y = 10
x = x ^ y;// 10 ^ 5 ^ 10 x = 5
System.out.println("x = " + x + ",y = " + y);
}
}
class Demo3_Operator {
public static void main(String[] args) {
/*
* <>:右移最高位是0,左边补齐0;最高为是1,左边补齐1
* >>>:无符号右移 无论最高位是0还是1,左边补齐0
* 最有效率的算出2 * 8的结果
*/
//左移,向左移动几位就是乘以2的几次幂
//System.out.println(12 << 1);//24
//System.out.println(12 << 2);//48
/*
00000000 00000000 00000000 0000110012的补码
(0)0000000 00000000 00000000 00001100024的补码
(00)000000 00000000 00000000 000011000048的补码
*/
//右移,向右移动几位就是除以2的几次幂
//System.out.println(12 >> 1);
//System.out.println(12 >> 2);
/*
00000000 00000000 00000000 0000110012的补码
000000000 00000000 00000000 0000110(0)6
0000000000 00000000 00000000 000011(00) 3
*/
//最有效率的算出2 * 8的结果
System.out.println(2 << 3);
}
}