Android中的位运算

文章目录


近期在阅读Android源码中发现了许多与位运算相关的代码,其实以前在使用Intent相关常量的时候也遇到过,但是没有怎么深入了解,今天趁此机会分析一下。

位运算

如果你是windows10的操作系统,你可以打开计算器输入以下十六进制,再把它们转换成二进制数字。
0x10000000(16) = ‭‭00010000000000000000000000000000‬‬(2)
0x20000000(16) = ‭00100000000000000000000000000000‬‬(2)
0x40000000(16) = ‭‭‭01000000000000000000000000000000‬‬‬(2)

我们首先观察二进制数字,可以发现每个十六进制数字对应的二进制,其二进制数都会比上一个少一个0。那么我们就可以利用这个特性来进行按位与(&)和按位或(|)的操作,来达到多个值的组合和判断。

public class Main {

private static final int A = 0x10000000;

private static final int B = 0x20000000;

private static final int C = 0x40000000;

    public static void main(String[] args) {

        // A的值
        System.out.println("A= "+Integer.toBinaryString(A));

        // B的值
        System.out.println("B= "+Integer.toBinaryString(B));

        // C的值
        System.out.println("C= "+Integer.toBinaryString(C));

        // 演示按位或(|)
        int flag0 = A|B|C;
        
        // 输出结果:1110000000000000000000000000000
        System.out.println(Integer.toBinaryString(flag0));

        // 判断是否存在A
        int flag1 = B|C;
        
        // 输出结果:false
        System.out.println((flag1 & A) == A);

        // 清除A
        int flag2 = A|B|C;
        flag2 &= ~A;
        
        // 输出结果:1100000000000000000000000000000
        System.out.println(Integer.toBinaryString(flag2));
    }
}

通过上面的代码和输出结果,可以发现
1.按位与(&)可以判断多值中有没有该值

(flag1 & A) == A // true代表flag1中有A,false代表flag1中没有A
(flag1 & A) == 0 // 如果为0代表flag1中没有A这个值

2.按位或(|)和&=~分别是添加值和清除该值

		boolean pressed = false;
        if (pressed) 
        {
            flag0 |= A; // 添加A
        } 
        else 
        {
            flag0 &= ~A; // 只清除A
        }

这些技巧可以用到实际开发中即可以存储多个值也可以简化判断。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rockyou666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值