byte a=-128;
 byte b=(a|127)>0?(byte)(~a>>128):(byte)(~a<<128);
 System.out.println(b);
各位大哥,b的输出结果是多少啊?都给我搞晕了

解决方案 »

  1.   

    首先,这是一个三目运算符。
    a?b:c
    意思就是如果a为真,就执行b;为假,执行c.
    其次括号的优先级最高;
    ~高于>>/<<.
     最后,
    左移运算符<<使指定值的所有位都左移N位.
    |,按位或运算符“|”,任何一个运算数为1,则结果为1;
    位运算符都是以二进值运算的。
    a|127=-1;
    -1>0为fasle,所以执行(byte)(~a<<128);
    ~a=127;
    ~a<<128=127;
    结果就是127了。
    具体怎么运算的,你可以自己换算成二进值慢慢算。
      

  2.   

    辛苦了,我唯独~a<<128=127;不知道是怎么运算出来的。
     希望仔细解释一下。
     ~a 是32位也好,8位也好,左移128位啊。都应该是0了阿。怎么出来的127呢?