• Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)


    参考链接:http://blog.csdn.net/vebasan/article/details/6193916

    位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。

    先看一个例子:

    public static void main(String[] args) {
        int a=129;
        int b=128;
        System.out.println("a, "+a+", "+Integer.toBinaryString(a));
        System.out.println("b, "+b+", "+Integer.toBinaryString(b));
        System.out.println("a&b, "+(a&b)+", "+Integer.toBinaryString(a&b));
        System.out.println("a|b, "+(a|b)+", "+Integer.toBinaryString(a|b));
        System.out.println("a^b, "+(a^b)+", "+Integer.toBinaryString(a^b));
        System.out.println("~a, "+~a+", "+Integer.toBinaryString(~a));
        System.out.println("~b, "+~b+", "+Integer.toBinaryString(~b));
    }


    运行结果

    a, 129, 10000001
    b, 128, 10000000
    a&b, 128, 10000000
    a|b, 129, 10000001
    a^b, 1, 1
    ~a, -130, 11111111111111111111111101111110
    ~b, -129, 11111111111111111111111101111111

    结果分析

    1.与运算符
    与运算符用符号“&”表示,其使用规律如下:
    两个操作数中位都为1,结果才为1,否则结果为0。

    “a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。

    2.或运算符
    或运算符用符号“|”表示,其运算规律如下:
    两个位只要有一个为1,那么结果就是1,否则就为0。

    a 的值是129,转换成二进制就是10000001,而b 的值是128,转换成二进制就是10000000,根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001,即129。

    3.非运算符
    非运算符用符号“~”表示,其运算规律如下:

    如果位为0,结果是1,如果位为1,结果是0。

    4.异或运算符
    异或运算符是用符号“^”表示的,其运算规律是:
    两个操作数的位中,相同则结果为0,不同则结果为1。

    分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。

    举例二

    int c = 7;
    System.out.println("c, "+c+", "+Integer.toBinaryString(c));
    System.out.println("~1, "+(~1)+", "+Integer.toBinaryString(~1));
    System.out.println("c&~1, "+(c&~1)+", "+Integer.toBinaryString(c&~1));

    运行结果

    c, 7, 111
    ~1, -2, 11111111111111111111111111111110
    c&~1, 6, 110

    结果分析

    与(~1)进行&操作时,结果是操作数的最末位被置零。

  • 相关阅读:
    python修改pip源
    python if条件判断dataframe是否为空
    bowtie和bowtie2使用条件区别及用法
    bat批处理for循环嵌套
    常用的数据标准化方法
    python学习——利用循环实现分类散点图绘制
    python学习——通过命令行参数根据fasta文件中染色体id提取染色体序列
    python学习——把读取fasta文件的代码封装成函数
    python学习——把计算GC含量的代码封装成函数
    python学习——使用argparse参数解释器传递命令行参数
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3123617.html
Copyright © 2020-2023  润新知