今天追源码的时候无意中发现了这样一种运算

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

输出结果
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值