逻辑运算符:连接布尔类型的运算符
逻辑与:& 有false则false
逻辑异或:^ 相同为false 不同为true
逻辑或:| 有true则true
逻辑非:!偶数个不改变,非false则true,非true则false
&&和&的区别?同理||和|的区别:
||和|的区别同理 ||左边结果为true,则右边的表达式不执行
开发中常用的逻辑运算符为:
逻辑与:& 有false则false
逻辑异或:^ 相同为false 不同为true
逻辑或:| 有true则true
逻辑非:!偶数个不改变,非false则true,非true则false
&&和&的区别?同理||和|的区别:
1.最终结果一样2. 相较&有短路的作用,即若&&左边的表达式结果为false,则右边的表达式不执行(右边的结果对最终表达式的结果无影响)
开发中常用的逻辑运算符为:
&&、||、!
位运算符:
&、|、^、~
<<、>>、>>>
最有效率的2*8的运算
2 << 3
注意:
当&、|左右连boolean类型的表达式时是逻辑运算符
当&、|左右连数值时是位运算符
面试题:
short s = 1; s = s+1;
short s = 1; s += 1;
上面两行代码有没有问题,如果有,请问是哪里有问题?
解答:
第一行有问题,编译报错:可能损失精度。因为默认转换,
short型数据在运算时默认先转换为int型,运算完成后赋值时int赋值给short就可能损失精度。
第二行,扩展的赋值运算符其实隐含了一个强制类型转换。
s += 1; 不是等价于s = s+1;而是等价于s = (s的数据类型)(s+1);即隐含的强制类型转换。
两个数值的互换
方法一:
第三方变量(开发使用)
int c = a;
a = b;
b = c;
方法二:
位异或(面试用)
左边a b a 右边a ^ b
a = a^b;
b = a^b; //a^b^b = a
a = a^b; //a^b^a = b
方法三:
变量相加的做法:
a = a + b;
b = a - b;
a = a - b;
方法四:
b = (a+b) - (a = b);