美文网首页
简单聊聊 JAVA位运算符

简单聊聊 JAVA位运算符

作者: Jevely | 来源:发表于2019-08-01 07:43 被阅读0次

    哈喽,本来打算讲一讲HashMap的原理的,但是发现在HashMap中用到了一些位运算符,所以打算先来讲讲Java的位运算符,这样在讲HashMap的时候更容易理解。

    Java位运算符分为 &|^~>><<,位运算符是对2进制进行位运算,在2进制中1表示true,0表示false。

    下面我们依次来讲解下:

    &(与运算符)

    与运算符表示的是都为true的时候才是true,否则为false。
    1 & 0 = 0
    1 & 1 = 1
    0 & 0 = 0
    栗子:
    3 & 6
    我们先得到3和6的2进制,分别为
    00000011
    00000110
    在与运算过后得到的是
    00000010
    所以最后结果转换为10进制为2。

    |(或运算符)

    或运算符表示的是如果有一个为true,那么就为true,否则为false。
    1 & 0 = 1
    1 & 1 = 1
    0 & 0 = 0
    栗子:
    5 | 7
    我们先得到5和7的二进制,分别为
    00000101
    00000111
    在或运算过后为
    00000111
    所以最后转换为10进制为7。

    ^(异或运算符)

    异或运算符表示的是如果相同,则为false,否则为true。
    1 & 0 = 1
    1 & 1 = 0
    0 & 0 = 0
    栗子:
    4 ^ 9
    我们先得到4和9的二进制,分别为
    00000100
    00001001
    在异或运算过后为
    00001101
    转换为10进制为13。

    ~(取反运算符)

    取反表示为true为false,false为true。
    ~ 1 = 0
    ~ 0 = 1

    在讲栗子之前先说一下2进制的最高位是用来表示正负的,如果最高位为0,则为正数,如果为1,则为负数。比如-6,转换为2进制就是6的2进制取反然后+1。
    6的2进制为(因为Int是32位,所以我们用32位表示更加清楚)
    00000000 00000000 00000000 00000110
    那么取反过后为
    11111111 11111111 11111111 11111001
    因为是-6,所以我们在6取反过后还要+1,那么-6的2进制为
    11111111 11111111 11111111 11111010

    在讲完正负如何转换2进制过后我们来举一个取反的栗子
    ~6
    我们先拿到6的2进制为
    00000000 00000000 00000000 00000110
    取反过后为
    11111111 11111111 11111111 11111001
    然后转换为10进制,因为最高位为1,所以为负数,负数转换为10进制我们要先-1,再取反,最后得到的数前面加一个负号就好。
    所以我们最后得到的是 -7。

    >>(右移运算符)

    右移就是将2进制向右移动。
    栗子:
    5 >> 2
    就是将5的2进制向右移动2位。
    5的2进制为
    00000101
    右移过后为
    00000001
    那么最后结果转为10进制为1。
    这里需要注意的是在移动过后必然需要补位,补位的时候如果左边为0,那么久补0,如果为1,那么就补1。

    <<(左移运算符)

    左移运算符和右移运算符原理一样,只不过是向左移动。这里我们还是用5来举栗子。
    5 << 2
    5的2进制为
    00000101
    左移两位过后为
    00010100
    转换为10进制为20


    上文中如果有错误欢迎大家指出。

    3Q

    相关文章

      网友评论

          本文标题:简单聊聊 JAVA位运算符

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