美文网首页
日拱一卒:位运算

日拱一卒:位运算

作者: Tinyspot | 来源:发表于2023-02-22 20:14 被阅读0次

1. 进制

二进制:0, 1
八进制:0~8
十进制:0~9
十六进制:0~9、A~F

1.1 进制转换

十进制转二进制:除 2 取余数,逆序排列

@Test
public void convert() {
    int data = 240;
    System.out.println("二进制:" + Integer.toBinaryString(data));
    System.out.println("八进制:" + Integer.toOctalString(data));
    System.out.println("十六进制:" + Integer.toHexString(data));

    System.out.println(Integer.valueOf("11110000", 2));
    System.out.println(Integer.valueOf("F0", 16));

    System.out.println(0xF0);
}

2. 位运算符

位运算符主要用来对操作数二进制的位进行运算
按位运算表示按每个二进制位(bit)进行计算

运算符 描述 运算规则
& 按位与(AND) 0&0=0   0&1=0   1&0=0   1&1=1
| 按位或(OR) 0|0=0   0|1=1   1|0=1   1|1=1
^ 按位异或(XOR) 0^0=0   0^1=1   1^0=1   1^1=0
~ 按位取反(NOT) ~1=0   ~0=1

2.1 位运算符 vs 布尔运算符

  • & 与 && 运算结果一样,但 && 会短路
  • 布尔运算符通常用于布尔值,而按位运算符通常用于整数值
  • 布尔运算符是短路,但按位运算符不是短路

3. 位移运算符

  • 按二进制形式把所有的数字向左(右)移动对应的位数
  • byte 和 short 会先转换为 int 再进行移位
运算符 描述 运算规则
<< 左移 左移对应的位数,高位移出(舍弃),低位的空位补零
>> 有符号右移 右移对应的位数,低位移出(舍弃),高位的空位补零
>>> 无符号右移

4. 复合位赋值运算符

运算符 描述 实例 简称
&= 按位与赋值 a &= b => a = a & b 与等于
|= 按位或赋值 a |= b => a = a | b 或等于
^= 按位异或赋值 a ^= b =>a = a ^ b
~= 按位取反赋值 a ~= b =>a = a ~ b
«= 按位左移赋值 a «= b =>a= a « b
»= 按位右移赋值 a »= b =>a = a » b

5. 位掩码(BitMask)

位掩码(BitMask),是”位(Bit)“和”掩码(Mask)“的组合词。”位“指代着二进制数据当中的二进制位,而”掩码“指的是一串用于与目标数据进行按位操作的二进制数字。组合起来,就是”用一串二进制数字(掩码)去操作另一串二进制数字“的意思

public class Mask {
    /**
     * 掩码(MASK)
     * 标识符,每个bit表示一种状态
     */
    private static int base = 1;
    // 0001
    private static int devMask = base;
    // 0010
    private static int testMask = base << 1;
    // 0100
    private static int prodMask = base << 2;

    @Test
    public void test() {
        // 0101
        int value = 5;

        // 0101 & 0001 = 0001
        boolean develop = isDevelop(value);

        // 0101 & 0010 = 0000
        boolean test = isTest(value);

        // 0101 & 0100 = 0100
        boolean prod = isProd(value);
    }

    public boolean isDevelop(int value) {
        return (value & devMask) != 0;
    }

    public boolean isTest(int value) {
        return  (value & testMask) != 0;
    }

    public boolean isProd(int value) {
        return  (value & prodMask) != 0;
    }
}

相关文章

  • 1680万元的一张午餐券

    2018年5月10日,日拱一卒,积跬步,精进未来的自己。 拱什么?拱自己无知之门。 两位老头,一位88,一位94。...

  • 日拱一卒英语社群复盘ing

    相 信 我,你 并 不 孤 独。 日拱一卒启动仪式1-4合集 日拱一卒”英语社群入群作业 日拱一卒启动仪式1-4合...

  • 日拱一卒

    日拱一卒是一个成语,完整的表述是:日拱一卒,功不唐捐。源于《法华经》 :“日拱一卒无尽有,功不唐捐终入海”。 会下...

  • 2017-10-11

    持之以恒,日拱一卒。

  • 2017-10-11

    持之以恒,日拱一卒。

  • 今晚,信仰

    如题,日拱一卒

  • 感觉要重新开始写作了

    按兴趣日拱一卒

  • 坚持还是放弃?取舍之间彰显大智慧。

    今天看到一段话,感觉写的更好,分享给大家。“日拱一卒”源于《法华经》:日拱一卒,功不唐捐——日拱一卒无有尽,功不唐...

  • 日拱一卒

    日拱一卒 任务0(12月11日) 最近刚加入这个“日拱一卒”的社群,名字非常好,学英文就...

  • 无题

    日拱一卒,功不唐捐。

网友评论

      本文标题:日拱一卒:位运算

      本文链接:https://www.haomeiwen.com/subject/ochakdtx.html