逻辑运算符
& 与运算
分别计算两边的结果再作 & 运算,只有两个都为true,结果才为true,否则为false
| 或运算
分别计算两边的结果再作 | 运算,只有有一个为true,结果都为true,两边都为false才为false
^ 异或运算
两边相同为false,不同为true (异或两边不同)
&和&&的区别
&: 在逻辑运算时分别计算表达式两边的结果,再作&运算,在做位运算时&表示按位与
&&:短路与运算,先计算左边的表达式,如果结果是false,那么不用计算右边表达式,直接返回false
如果左边的表达式结果是true,再计算右边的表达式,如果右边的表达式为true,结果为true,否则为false //| 和 ||的原理同上。 // 所以短路与 或 短路或的计算效率更高,建议使用。
位运算符
对两个操作数中的每一个二进制都进行运算
位运算符功能:
1、按位取反 ~
2、按位与 &
3、按位或 |
4、按位异或 ^
位移运算符
左移:“ a<<b ;” 将二进制形式的a逐位左移b位,最低位空出的b位补0
带符号右移:“ a>>b ;” 将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位
无符号右移:“ a>>>b ;” 将二进制形式的a逐位右移b位,最高位空出的b位补0
面试题:以最快的速度计算8*4结果?
//int result = 8 *4;
// 0000 1000 8
// 0010 0000 32
System.out.println (8<<2);//最快计算速度
左移算法:位移数作为2的次幂与操作数相乘
例如:8*4=32 -----> 8<<2
右移算法:操作数除以位移数的2次幂
例如:40/4=10 -----> 40>>2
问题:通过键盘输入,初始化两个数将这两个数据交换位置后,输出显示交换后的数据。
(1)通过第三个变量来交换
(2)不通过第三个变量进行交换
运算符优先级表