[code]
逻辑运算符的基本用法: &,|,^,!
1:逻辑与&并且and 遇false则false
2:逻辑或| or 遇true则true
3:逻辑^或(亦或) 两边相同为false,不同则true
4:逻辑非! 非false则true,非true则false
03.02-逻辑运算符&&和&的区别:
&&和&的区别
1 最终结果一样
2 &&具有短路效果.左边是false,右边不执行.
||和|的区别?
1 最终的记过一样
2 ||具有短路效果.左边true右面不执行
开发中常用谁?
&&,||,!
03.03-位运算符的基本用法01
位&:有0则0 //位运算符直接操作 的是二进制的值 0代表false 代表true
位|:有1则1 //遇true则true
位^:相同则0,不同则1
位~:按位取反 //""取反的规律是如果数值是a 那么结果就是-(a+1)""
~A=(A+1)乘以 -1
System.out,println(6 & 3); = 2
/*6的二进制是 110
&
3的二进制是 011
-------------------- = 2
有0则0 010
*/
位|:有1则1
System.out,println(6 | 3); = 7
/*6的二进制是 110
|
3的二进制是 011
-------------------- = 7
有1则1 111
*/
位^:相同则0,不同则1
System.out,println(6 ^ 3); = 5
/*6的二进制是 110
^
3的二进制是 011
-------------------- = 5
有1则1 101
*/
位~:按位取反
System.out,println(~6); = - 7 //6是int类型 先转换
/* 00000000 00000000 00000000 00000110 6的原码 反码 补码 都是本身
11111111 11111111 11111111 11111001 对6取反
- 1 00000000 00000000 00000000 00000001
------------------------------------------
11111111 11111111 11111111 11111000 反码
10000000 00000000 00000000 00000111 原码(-7) "最高位是1 所以是负数"
*/
03.04-位异或运算符的特点及面试题
/*
*位异或运算符的特点
* ^的特点: 一个数据对另一个数据位异或两次,该数本身不变.
*/
System.out.println(5 ^ 10 ^ 10); 结果是 5
System.out.println(5 ^ 10 ^ 5); 结果是 10
* 请自己实现两个整数变量的交换
* 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
int x = 10
int y = 5
//需要第三方变量,开发推荐用这个
/*int temp; 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
System.out.println("x = " + x ",y = " + y);
//不需要第三方变量,通过^来做
x = x ^ y // 10^5
y=x^y //10^5^5 y=10
x=x^y //10^5^10 x=5
03.05-位运算符的基本用法2及面试题
/*
*<<:左移 左边最高位丢弃,右面补齐0
*>>:右移 最高位是0,左边补齐0;最高位是1,左边补齐1
*>>>:无符号右移 无论最高位是0 还是1,左边补齐0
*最有效的算出2*8的结果
*/
规律:
//左移,向左移动几位就是乘以2的几次幂
System.out.ptintln(12 << 1) //24
System.out.println(12 << 2) //48
/*
00000000 00000000 00000000 00000000 00001100 12补码
(0)00000000 00000000 00000000 00000000 00001100 24的补码
(00)00000000 00000000 00000000 00000000 00001100 48的补码
*/
//右移,向右移动几位就是除以2的几次幂
//
/*00000000 00000000 00000000 00000000 00001100 12补码
00000000 00000000 00000000 00000000 00001100(0) 6补码
00000000 00000000 00000000 00000000 00001100(00) 3补码
*/
//最有效率的算出2*8的结果
System.out.println(2<<3); 8是2的三次幂 // 8=2*2*2 三个2 所以移三位
直接是2的二进制想右移3位 得出结果 (直接运算比较快速)
否则 则是先把 2的二进制 在 把 8的二进制 换算出来 在相乘 (计算麻烦)
|
|