public class abc {
  public static void main(String[] args) {
    int i = -1;
    i >>>= 10;
    System.out.println(i);
    long l = -1;
    l >>>= 10;
    System.out.println(l);
    short s = -1;
    s >>>= 10;
    System.out.println(s);
    byte b = -1;
    b >>>= 10;
    System.out.println(b);
    b = -1;
    System.out.println(b>>>10);
  }
}
4194303
18014398509481983
-1
-1
4194303不知道为什么结果会出来这么一大堆的数,,怎么得的??感谢。。我计算机理论不过关呀,帮帮忙吧。

解决方案 »

  1.   

    java specification 3ed 
    15.19 Shift OperatorsThe value of n>>>s is n right-shifted s bit positions with zero-extension. If n is positive, then the result is the same as that of n>>s; if n is negative, the result is equal to that of the expression (n>>s)+(2<<~s) if the type of the left-hand operand is int, and to the result of the expression (n>>s)+(2L<<~s) if the type of the left-hand operand is long. The added term (2<<~s) or (2L<<~s) cancels out the propagated sign bit. (Note that, because of the implicit masking of the right-hand operand of a shift operator, ~s as a shift distance is equivalent to 31-s when shifting an int value and to 63-s when shifting a long value.)
      

  2.   

    我现在要问的不是>>>是什么功能,功能我知道,我要我程序中的结果是怎么得出来的,
      

  3.   

    看<<Thinking in Java>>  三版  56页,有这个题的答案
      

  4.   

    mport java.util.*;public class test1 {
      //static Test monitor = new Test();
      public static void main(String[] args) {
        Random rand = new Random();
        int i = rand.nextInt();
        int j = rand.nextInt();
        printBinaryInt("-1", -1);
        printBinaryInt("+1", +1);
        int maxpos = 2147483647;
        printBinaryInt("maxpos", maxpos);
        int maxneg = -2147483648;
        printBinaryInt("maxneg", maxneg);
        printBinaryInt("i", i);
        printBinaryInt("~i", ~i);
        printBinaryInt("-i", -i);
        printBinaryInt("j", j);
        printBinaryInt("i & j", i & j);
        printBinaryInt("i | j", i | j);
        printBinaryInt("i ^ j", i ^ j);
        printBinaryInt("i << 5", i << 5);
        printBinaryInt("i >> 5", i >> 5);
        printBinaryInt("(~i) >> 5", (~i) >> 5);
        printBinaryInt("i >>> 5", i >>> 5);
        printBinaryInt("(~i) >>> 5", (~i) >>> 5);    long l = rand.nextLong();
        long m = rand.nextLong();
        printBinaryLong("-1L", -1L);
        printBinaryLong("+1L", +1L);
        long ll = 9223372036854775807L;
        printBinaryLong("maxpos", ll);
        long lln = -9223372036854775808L;
        printBinaryLong("maxneg", lln);
        printBinaryLong("l", l);
        printBinaryLong("~l", ~l);
        printBinaryLong("-l", -l);
        printBinaryLong("m", m);
        printBinaryLong("l & m", l & m);
        printBinaryLong("l | m", l | m);
        printBinaryLong("l ^ m", l ^ m);
        printBinaryLong("l << 5", l << 5);
        printBinaryLong("l >> 5", l >> 5);
        printBinaryLong("(~l) >> 5", (~l) >> 5);
        printBinaryLong("l >>> 5", l >>> 5);
        printBinaryLong("(~l) >>> 5", (~l) >>> 5);
        //monitor.expect("BitManipulation.out");
      }
      static void printBinaryInt(String s, int i) {
        System.out.println(
          s + ", int: " + i + ", binary: ");
        System.out.print("   ");
        for(int j = 31; j >= 0; j--)
          if(((1 << j) &  i) != 0)
            System.out.print("1");
          else
            System.out.print("0");
        System.out.println();
      }
      static void printBinaryLong(String s, long l) {
        System.out.println(
          s + ", long: " + l + ", binary: ");
        System.out.print("   ");
        for(int i = 63; i >= 0; i--)
          if(((1L << i) & l) != 0)
            System.out.print("1");
          else
            System.out.print("0");
        System.out.println();
      }
    } ///:~
    TKJ上的移过来的
    楼主看下应该会明白了
      

  5.   

    首先 int 是4Byte的空间
    那么 int i =-1; 就是 11111111111111111111111111111111跟着 i>>>10 也就是不管符号的右移10位, 那么就会变成 00000000001111111111111111111111
    也就是10进制中的4194303其它的都一样,以此类推