运算符 & 和 &&, | 和|| 的区别
& 按位与 操作
| 按位或 操作
&&, || 短路运算符,在逻辑判断中常见
& 和 && 都可以实现 和 这个功能
区别:& 两边都运算,而 && 先算 && 左侧,若左侧为false,那么右侧就不运算,判断语句中推荐使用 &&,效率跟高.
| 和 || 和上面类似
区别: || 只要满足第一个条件,后面的条件就不在判断,而 | 要对所有的条件进行判断
把&& 和 || 称之为短路运算符
- 用最有效率的方法计算2乘以8
原理: 将一个数左移n位,相当于乘以2的n次方,位运算是CPU直接支持的,所以效率高.
答案: 2<<3
2*2的3次方
常见的JDK源码里面HashMap的默认容量16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
直接二进制操作,表示1左移4位,变成1000,转为10进制也就是16
补充知识 >>> 进制的转换算法?
讲解异或运算在面试中的考查点和分析
- 考点:计算机基础运算知识
- 写个方法,传递连个非0的Int数值进去,实现变量交换的方式,有几种方式?
方式一:public static void main(String[] args) { swap(31, 40); } public static void swap(int a, int b) { System.out.printf("a=%d,b=%d", a, b); a = a + b; b = a - b; a = a - b; System.out.printf("\na=%d,b=%d", a, b); }
方式二:异或运算(一个数与另一个数异或两次是其本身,一个数和自身异或 结果是0)a=31,b=40 a=40,b=31
public static void swap(int a, int b) { System.out.printf("a=%d,b=%d", a, b); a = a ^ b; // a1 = a^b b = b ^ a; // b = b^a^b a = a ^ b; // a= a1^b = a^b^a System.out.printf("\na=%d,b=%d", a, b); }
a=31,b=40 a=40,b=31