Java位运算符

&与、|或、^异或、~取反、<<左移、>>右移、 >>>无符号右移

&:有0则0####

例:6&2
    6二进制:110
    2二进制:10
    110
    010
    010:结果
    6&2=2

|:有1则1####

例:6|2
    6二进制:110
    2二进制:10
    110
    010
    110:结果
    6&2=6

^:相同则0,不同则1####

例:6^2
    6二进制:110
    2二进制:10
    110
    010
    100:结果
    6&2=4

~:按位取反####

例:~6
    6二进制:110
    00000000 00000000 00000000 00000110
取反11111111 11111111 11111111 11111001补码运算取原码
  - 00000000 00000000 00000000 00000001
 反码11111111 11111111 11111111 11111000
 原码10000000 00000000 00000000 00000111
    10000000 00000000 00000000 00000111=-7
所以~6=-7

<<:左边最高位丢弃,右边补齐0

例:12<<1
        00000000 00000000 00000000 00001100
左移(0)0000000 0000000 0000000 00011000
        0000000 0000000 0000000 00011000=24
        12<<1=24;

>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1

例:12>>1
        00000000 00000000 00000000 00001100
右移     000000000 00000000 00000000 0000110(0)
         000000000 00000000 00000000 0000110=6
        12>>1=12;

>>>:无符号右移 无论最高位是0还是1,左边补齐0

例:12>>>1
        00000000 00000000 00000000 00001100
右移     000000000 00000000 00000000 0000110(0)
         000000000 00000000 00000000 0000110=6
        12>>>1=12;
   -12>>>1
    原码10000000 00000000 00000000 00001100
    反码11111111 11111111 11111111 11110011
    补码11111111 11111111 11111111 11110100
无符号右移01111111 11111111 11111111 11111010(0)
    01111111 11111111 11111111 11111010=2147483642
    -12>>>1=2147483642

原码、反码、补码:http://www.jianshu.com/p/a22d08bf525f

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容