求expr的值,要求是分析整个过程。要详细的。。非诚勿扰
 int a = 255;  
 int expr = (byte)a+ (((byte)a) & 0xff); 

解决方案 »

  1.   


        int a = 255;   
     int expr = (byte)a+ (((byte)a) & 0xff);  
     //a的二进制为00000000 00000000 00000000 11111111
     //强制转换为byte时,截取其低8位,也就是说取11111111
     //这个值是-1的补码形式,所以a强制转换为byte后的值是-1。
     //0xff的二进制位11111111,这两个值按位与以后还是11111111,
     //java中byte,short,char在运算的过程中自动转化为int型,
     //故其十进制是255,然后和-1相加,所以expr的值为254
      

  2.   

             int a = 255;   
             int expr = (byte)a+ (((byte)a) & 0xff);  
             //a的二进制为00000000 00000000 00000000 11111111
             //强制转换为byte时,截取其低8位,也就是说取11111111
             //这个值是-1的补码形式,所以a强制转换为byte后的值是-1。
             //0xff的二进制位11111111,这两个值按位与以后还是11111111,
             //java中byte,short,char在运算的过程中自动转化为int型,
             //故其十进制是255,然后和-1相加,所以expr的值为254
      

  3.   

    楼上正解..byte是8位,最左边为符号位,转换为补码形式后为-1,主要是((byte)a) & 0xff这一步会自动转成int类型,得到255,两者相加为254
      

  4.   

    1楼的正解。3楼的补充也是对的。LZ可能主要是没有注意到基本类型所占的空间大小
    具体的如下: byte 1 short 2 int 4 char 4 long 8 double 8 
    如果超过了范围的话就会向低取整,还有就是负数的那个问题