本来今天只是想了解下分布式的,结果无意间看到了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);
}
}
输出结果

27万+

被折叠的 条评论
为什么被折叠?



