system.out.println(-8>>>2),输出1073741822。求解释。谢谢。

解决方案 »

  1.   

    -8的二进制表示为:0000 0000 0000 0000 0000 0000 0000 1000?
    右移两位为0000 0000 0000 0000 0000 0000 0000 0010,不是等于-2了吗?
    它中间是三个>>>,不是两个>>。如果是两个>>,答案就是-2.
    我发现一个问题:|-2| + 1073741822 = 1073741724 = 2^30。不知道是否是巧合。
      

  2.   

    在JAVA中 int是一个含符号的变量
    0x0~0x7FFFFFFF为正数,0x80000000~0xFFFFFFFF为负数。
    其中0xFFFFFFFF表示的是-1,-8是用0xFFFFFFF8表示的。
    把这个数无符号右移2位,就是0x3FFFFFFE;
    把这个数有符号右移2位,就是0xFFFFFFFE;
    (用计算器把它转换一下吧?)
      

  3.   

    -8:             1111 1111 1111 1111 1111 1111 1111 1000  或者0xfffffff8
    无符号右移两位:  0011 1111 1111 1111 1111 1111 1111 1110  或者0x3ffffffe