与(&)
参加运算的两个数据,按二进制位进行“与”运算。
布尔短路与判断
运算规则:true & true = true;true & false = false;只要有一个为false,结果就是false
boolean result01 = 1 != 1 & 1 == 1; // false, 即使1 != 1已经为false,还会去判断1 == 1的结果
boolean result01 = 1 != 1 && 1 == 1; // false, 因为1 != 1已经为false,不会再去判断1 == 1的结果
二进制位操作
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
目前遇到的用法:
- 计算一个整数类型n的二进制中1的个数
int n = 16;
int count = 0;
while (n != 0){
n &= n - 1; // 每次消除最右边的1,当n为0结束。也可用来判断一个整数是否为2的n次方
count ++;
}
System.out.println("二进制中1的个数:" + count);
- 与异或(^)一起使用,完成+操作
传送门
或(|)
参加运算的两个数据,按二进制位进行“与”运算。
布尔短路或判断
运算规则:true & true = true;true & false = true;只要有一个为true,结果就是true
boolean result01 = 1 == 1 | 1 != 1; // true, 即使1 == 1已经为true,还会去判断1 != 1的结果
boolean result01 = 1 == 1 || 1 != 1; // true, 因为1 == 1已经为true,不会再去判断1 != 1的结果
二进制位操作
运算规则:0|0=0;0|1=1;1|0=1;1|1=1;
目前遇到的用法:
- hashmap中初始化容量大小,获取大于等于cap的、最接近cap的2的次方的数
例如:cap = 3,返回结果 4
cap = 6,返回结果 8
cap = 7,返回结果 8
cap = 8,返回结果 8
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
异或(^)
参加运算的两个数据,按二进制位进行“与”运算。
二进制位操作
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;
目前遇到的用法:
1.与操作符(&)一起使用,完成+操作
传送门