本来今天只是想了解下分布式的,结果无意间看到了ThreadLocal,又跑去追ThreadLocal源码了,结果卡在了这个位置 后来在网上翻阅资料和自己的测试 才整明白这个运算的使用规则
一直以为& |运算符只是一种逻辑运算符,只能得到布尔值,没想到也可以用来做数值运算 大致的原理如下: 首先得知道计算机处理的二进制指令, 1代表true,0代表false 然后计算机在进行运算的时候,会将十进制转换成二进制,然后进行判断。 比较规则: 如果是 & 运算的话: 比较两个二进制的相同位上的值是否都为1, 如果是都为1的话,取1,否则取0 如果是 | 运算的话: 比较两个二进制的相同位上的值是否都为0, 如果都为0的话,取0,否则取1 最后将比较得到的二级制结果转换成十进制,得到最终值
public class Test { /** * 用于测试: &的用法 * 例如: 5的二进制为101 * 4的二进制位100 * 根据以上比较规则得到二进制值为 100 * 转换成十进制就是 4 */ @Test public void test1(){ // 5 - > 101 4 - > 100 100 ->4 int i1 = 5 & 4; int i2 = 4 & 4; // 4: 100 4:100 100 -> 4 int i3 = 3 & 4; // 3: 011 4:100 000 -> 0 int i4 = 6 & 3; // 6: 110 3:011 010 -> 2 System.out.println("i1 = " + i1); System.out.println("i2 = " + i2); System.out.println("i3 = " + i3); System.out.println("i4 = " + i4); } }输出结果