先浅谈二进制:(以4位为例,8位、16位、32位则以此类推)


四位  0000   第一位是符号位  0代表正,1代表负

如下圆环以0为起点,顺时针加1  逆时针减一

数字    二进制

0         0000

1         0001

2         0010

3         0011

4         0100

5         0101

6         0110

7         0111    

如图 显示 -1 和7 在圆环的一个点上  则 把符号位改为 1 则表示负数,即

-1        1111

以此类推

-2        1110

-3         1101

...

-8         1000


关于右移运算符

网上关于原码、反码和补码的文章有很多 可以对比理解,其实就是用补码表示负数。


走入正题,关于右移运算符>>  和 >>>

>> 高位补符号位,即是正数补0,负数补1

>>>  高位补0

正数的 >> 和 >>> 运算结果是一样的

例如:

public static void main(String[] args) {
  int i1 = 16;
  System.out.println(i1>>2);//4
  System.out.println(i1>>>2);//4
 }

这里是用JAVA为例子,在java中int类型为4个字节 32为

16          0000 0000 0000 0000 0000 0000 0001 0000

所以不管是 >> 还是>>> 运算高位都是补0,运算结果二进制如下:

16>>2    0000 0000 0000 0000 0000 0000 0000 0100      //结果是4


负数的运算结果则是不一样的:

public class Demo1 {
 public static void main(String[] args) {
  int i2 = -16;
  System.out.println(i2>>2);//-4
  System.out.println(i2>>>2);//1073741820
 }
}


-16的原码             1000 0000 0000 0000 0000 0000 0001 0000

-16的反码             1111 1111 1111 1111 1111 1111 1110 1111

-16的补码             1111 1111 1111 1111 1111 1111 1111 0000  (-16反码的基础上加1)

-16 >> 2               1111 1111 1111 1111 1111 1111 1111 1100     -4

-16>>>2               0011 1111 1111 1111 1111 1111 1111 1100     1073741820 










相关文章:

  • 2022-02-09
  • 2022-01-13
  • 2022-02-09
  • 2021-08-02
  • 2021-09-21
  • 2022-02-09
  • 2022-02-09
猜你喜欢
  • 2022-02-09
  • 2022-12-23
  • 2022-02-09
  • 2022-02-09
  • 2021-07-27
  • 2022-12-23
相关资源
相似解决方案