Java|Java 中的位运算与移位运算详解

目录

  • 位运算
    • 按位“与” &
    • 按位“或” |
    • 异或 ^
  • 移位运算
    • 左移 <<
    • 右移 >>
    • 无符号右移 >>>
  • 总结

    位运算
    按位“与” &
    规则: 如果两个相应的二进制形式的对应的位数都为 1,则结果为 1;否则为 0;
    4 & 5
    4
    0000 0100
    5
    0000 0101
    按位与运算
    &
    4 & 5 = 4
    0000 0100
    1 * 2^2 = 4
    -4 & 5
    -4
    1111 1100
    5
    0000 0101
    按位与运算
    &
    规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)
    -4 & 5 = 4
    0000 0100
    1 * 2^2 = -4
    1.正数直接取二进制运算
    2.负数取反加一得补码再运算,得到的结果符号位为 0,不需要做任何操作直接给出结果

    按位“或” |
    规则: 有 1 为 1;否则为 0;
    4 | 5
    4
    0000 0100
    5
    0000 0101
    按位或运算
    |
    4 | 5 = 5
    0000 0101
    1 * 2^0 + 1 * 2^2 = 5
    -4 | 5
    -4
    1111 1100
    5
    0000 0101
    按位或运算
    |
    规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)
    -4 | 5 =
    1111 1101
    减1
    1111 1100
    取反
    -0000 0011
    -4 | 5 = -3
    1 * 2^0 + 1 * 2^1 = -3

    异或 ^
    规则: 相同为 0;不同为 1;
    4 ^ 5
    4
    0000 0100
    5
    0000 0101
    按位异或运算
    ^
    4 ^ 5 = 1
    0000 0001
    1 * 2^0 = 1
    -4 ^ 5
    -4
    【Java|Java 中的位运算与移位运算详解】1111 1100
    5
    0000 0101
    按位异或运算
    ^
    规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)
    -4 ^ 5 =
    1111 1001
    减1
    1111 1000
    取反
    -0000 0111
    -4 ^ 5 = -7
    1 * 2^0 + 1 * 2^1 + 1 * 2^2 = -7

    移位运算
    左移 <<
    规则: 右边空出的位用 0 填补高位,左移溢出则舍弃该高位。
    8 << 2
    8
    0000 1000
    << 2
    0010 0000
    左移运算符
    <<
    结果
    8 << 2 = 32
    1 * 2^5 = 32
    -8 << 2
    -8
    1111 1000
    << 2
    1110 0000
    左移运算
    <<
    规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)
    减1
    1101 1111
    取反
    -0010 0000
    -8 << 2 = -32
    1 * 2^5 = -32

    右移 >>
    规则: 左边空出的位正数用 0 负数 1 填补,右移溢出则舍弃该低位。
    8 >> 2
    8
    0000 1000
    >> 2
    0000 0010
    左移运算符
    >>
    结果
    8 >> 2 = 2
    1 * 2^1 = 2
    -8 >> 2
    -8
    1111 1000
    >> 2
    1111 1110
    左移运算
    >>
    规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)
    减1
    1111 1101
    取反
    -0000 0010
    -8 >> 2 = -2
    1 * 2^1 = -2

    无符号右移 >>>
    规则: 正数与右移规则一样;负数无符号右移,在高位补 0
    8 >>> 2
    8
    0000 1000
    >> 2
    0000 0010
    无符号右移运算符
    >>>
    结果
    8 >>> 2 = 2
    1 * 2^1 = 2
    -8 >>> 2
    -8
    1111 1111 1111 1111 1111 1111 1111 1000
    >>> 2
    0011 1111 1111 1111 1111 1111 1111 1110
    无符号右移运算符
    >>>
    规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)
    减1
    -
    取反
    -
    -8 >>> 2 = 1073741822
    1073741822

    总结
    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

      推荐阅读