&&(短路与/双与)
双与和单与的相同点和不同点:
相同点:短路与和单与运算的结果是一样的。
不同点:使用短路与的时候,如果左边的布尔表达式结果为false,那么后面的布尔表达式就不会再去运算了。从而提高了效率。
使用单与的时候,如果左边的布尔表达式的结果为false,还是会运算后面的布尔表达式。
System.out.println(true&&true);
System.out.println(false&&true);
System.out.println(false&&false);
System.out.println(true&&false);
如果布尔表达式左边的结果false的时候那么双与的效率高于单与。
||(短路或/双或)
短路或与单或的相同点与不同点:
相同点:运算的结果一致。
不同点:使用短路或的时候,当发现左边的布尔表达式为true的时候,则不会运算后面的布尔表达式。
使用单或的时候发现左边布尔表达式为true的时候,还是会运算后面的布尔表达式
System.out.println(true||true);
System.out.println(false||true);
System.out.println(false||false);
System.out.println(true||false);
位运算符:(位运算符就是操作二进制位的)
& (与)
| (或)
^ (异或)
规律:如果一个操作数A连续异或同一个操作数,那么结果还是操作数A。
~ (取反)
位运算符的笔试题目:
1.交换两个变量的值,不准出现第三方变量
1,
int a = 3;
int b = 5;
第一种方法: 定义第三方变量。
int temp = a; //a=3,
a = b; //a = 5
b = a; //把temp的值赋予给b,b = 3.
方法2:相加法, 缺点: 两个int类型相加,值可能超出int类型的表达范围。
a = a+b; //a = 8
b = a -b; //b = 3,8-5
a = a -b; //a = 5 8-3
方法3:可以使用异或. 缺点:逻辑不够清晰
a = a^b /a = 3^5
b = a^b //b = (3^5)^5 = 3
a = a^b //a = (5^3)^3 = 5
2,取出一个二进制数据的指定位数。要求读取二进制数据的低四位。
00000000-00000000-00010100-01001101
& 00000000-00000000-00000000-00001111
————————————————————————————
00000000-00000000-00000000-00001101