在Java中有7个位运算符:

分别是按位与  &:两位都为1,结果为1,否则为0

按位或  | :两位有一个为1,结果为1,否则为0。

按位异或  ^ : 两位一个为0,一个为1,结果为1,否则为0。

按位取反   :0 -> 1 ,1 -> 0。

例如: 2 & 3 =  , -2=  ,  2=  ,  2|3=  ,  2^3=

2 & 3 =
解析:
 1. 先得到2的补码=〉2的原码00000000 00000000 00000000 00000010
    2的补码=> 00000000 00000000 00000000 00000010

 2. 3的原码=> 00000000 00000000 00000000 00000011
    3的补码=> 00000000 00000000 00000000 00000011

 3.按位&
  00000000 00000000 00000000 00000010
  00000000 00000000 00000000 00000011
  00000000 00000000 00000000 00000010  & 运算后的补码

  运算后的原码也是00000000 00000000 00000000 00000010
  结果就是2

-2= 
推导
1.先得到-2的原码 10000000 00000000 00000000 00000010

2.-2的反码        11111111 11111111 11111111 11111101

3.-2的补码        11111111 11111111 11111111 11111110

4.~-2操作         00000000 00000000 00000000 00000001运算后的补码

5.运算后的原码就是00000000 00000000 00000000 00000001 =>1

2= 
推导
1.得到2的补码   00000000 00000000 00000000 00000010

2.~2操作        11111111 11111111 11111111 11111101 运算后的补码

3.运算后的反码  11111111 11111111 11111111 11111100

4.运算后的原码  10000000 00000000 00000000 00000011 => -3

>>、<<、>>>运算规则:

1)
  算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位。
2)
  算术左移 <<: 符号位不变,低位补 0。
3)
  >>> 逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0。
4)
  特别说明:没有 <<< 符号。

案例:
     int a=1>>2; //1 => 00000001 => 00000000 本质 1 / 2 / 2 = 0
     int c=1<<2; //1 => 00000001 => 00000100 本质 1 * 2 * 2 = 4

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注