如题

解决方案 »

  1.   

    首先 -1 是int类型。
    然后是(byte)-1 得到byte类型的 -1,
    (char)((byte)-1)得到char类型的-1,
    最后(int)((char)((byte)-1))将char转换成 int。
      

  2.   

    理解2点:
    1。char类型向表示范围比它大的类型转换时使用的是0扩展,也就是说在高位补0。
    2。byte类型转换为char类型其实是2步:先把byte提升为int,再把int转化为char(去掉高位)
      

  3.   

    按照java语法中运算符的结合顺序进行吧,另外lz可以写个实例,编译出来,然后用IDA反编译,可以看到一些奇怪的“汇编”。。
      

  4.   

    为什么要先将byte提升为int?
    更具点是怎么换算的?
    byte(-1)的2进制 1000 0001
    提升为int 为 1000 0000 0000 0000 0000 0000 0000 0001
    int转化为char 0000 0000 0000 0001
    char转化为int 0000 0000 0000 0000 0000 0000 0000 0001
    得出结果为1
    但是运行的结果是65535啊
      

  5.   

    答:
    为什么要先将byte提升为int? 
    更具点是怎么换算的? 
    byte(-1)的2进制 1000 0001 错 ==> 应 11111111
    提升为int 为 1000 0000 0000 0000 0000 0000 0000 0001  错
    应:1111 1111 1111 1111 1111 1111 1111 1111
    因此:int转化为char 1111 1111 1111 1111
    char转化为int 0000 0000 0000 0000 1111 1111 1111 1111 
    得出结果为 65535啊
      

  6.   

    不换算,编译的时候直接抓int来用
      

  7.   

    java采用补码
    byte(-1)的2进制的补码 1111 1111
    提升为int不是给高位补0吗,为什么是补1啊 
      

  8.   

    (byte)-1             :  -1      // byte 范围是 0-127
    (char)(byte)-1       :  ?       // char 范围是 '\u0000' 至 '\uffffff' (0 - 65535)
    (int)(char)(byte)-1  :  65535   (byte)-1             :  [B@35ce36
    整型数-1二进制表示为:
    11111111111111111111111111111111(char)(byte)-1       :  [B@757aef
    整型数65535二进制表示为:
    00000000000000001111111111111111(int)(char)(byte)-1  :  [B@d9f9c3
    整型数65535二进制表示为:
    00000000000000001111111111111111
    public class Overload {
       public static void main(String args[]) {
        System.out.println("(byte)-1             :  " + (""+(byte)-1).getBytes());
        IntToBin((byte)-1);
        
        System.out.println("(char)(byte)-1       :  " + (""+(char)(byte)-1).getBytes());
        IntToBin((char)(byte)-1);
        
        System.out.println("(int)(char)(byte)-1  :  " + (""+(int)(char)(byte)-1).getBytes());
        IntToBin((int)(char)(byte)-1);    
       }
       
       static void IntToBin(int x)
       {
        System.out.println("\n整型数"+x+"二进制表示为:");
        for(int i = 31;i >= 0;i--)
        {
            if(((1<<i) & x) != 0)
                System.out.print("1");
            else
                System.out.print("0");
        }
        System.out.println();
        }
       
    }
      

  9.   

    应该是这样的byte(-1)自动类型提升
    java采用补码 所以byte(-1)的补码为1111 1111 1111 1111 1111 1111 1111 1111
    后面的就是1。char类型向表示范围比它大的类型转换时使用的是0扩展,也就是说在高位补0。 
    2。byte类型转换为char类型其实是2步:先把byte提升为int,再把int转化为char(去掉高位)结贴