-1/2 二个整数的除法-1 >> 1 :-1的二进制表示为1111,1111 移位后仍为 1111,1111 

解决方案 »

  1.   

    -1/2为-0.5然而除数和被除数都是整数,所以结果为整数,当然就取0。
    >>是不带符号右移,你要的是带符号右移>>>
    public class W
    {
    public static void main(String[] args)
    {
    int a;
    double b,c,d;
    a=-1/2;
    b=-1/2;
    c=-1.0/2;
    d=-1/2.0;
    System.out.println(a+"  "+b+"   "+c+"   "+d);
    //输出为0  0.0   -0.5   -0.5

    System.out.println(-1>>>1);
    //输出为2147483647
    }
    }
      

  2.   

    不错FutureStonesoft(丑石) 
    好样的!
      

  3.   

    to:FutureStonesoft(丑石) 
      >>是不带符号右移,你要的是带符号右移>>>
     >>应该是带符号右移吧。
      

  4.   

    /*哎呀,真不好意思,我错了,以下纠正,算作补过,呵呵。多谢caiyanying732(学习) 的指正. >>是带符号右移,>>>是不带符号右移
    >>  是向右移位,左边用最高位(符号位)填充
    >>> 是向右移位,左边用0填充
    这样解释应该就清楚了。

    -1的二进制码位11111111B,所以用>>右移后,无论如何,
    高位的空白都会用它的符号位1来填充,所以全部都是1,
    故右移位后一直是-1,而如果用>>>右移后,高位会用0
    来填充,所以就编程了一个正数。
    */
    public class W
    {
    public static void main(String[] args)
    {
    System.out.println(15>>1);//7
    //15D=00001111B 带符号右移一位为 00000111B=7D
    System.out.println(-15>>1);//-8
    //-15D=11110001B 带符号右移一位为 11111000B=-8D
    System.out.println(-15>>>1);//2147483640
    //-15D=11111111111111111111111111110001B 
    //不带符号右移一位为01111111111111111111111111111000=2147483640D

    System.out.println(-1>>1);//-1
    //-1d=11111111111111111111111111111111B 
    //带符号右移一位后 11111111111111111111111111111111B=-1D
    System.out.println(-1>>>1);//2147483647
    //-1d=11111111111111111111111111111111B
    //不带符号右移一位后 01111111111111111111111111111111B=2147483647D
    System.out.println(-1>>2);//-1
    System.out.println(-1>>>2);//1073741823
    //-1D=11111111111111111111111111111111B
    //不带符号右移两位后 00111111111111111111111111111111B=1073741823D

    }
    }