int num1=129;
     byte num2=(byte)num1;
     System.out.println(num2);    
   //打印出:-127
     int num1=128;
     byte num2=(byte)num1;
     System.out.println(num2);    
   //打印出:-128
     int num1=256;
     byte num2=(byte)num1;
     System.out.println(num2);    
   //打印出:0
     int num1=257;
     byte num2=(byte)num1;
     System.out.println(num2);    
   //打印出:1急等

解决方案 »

  1.   

    byte的范围是-128 到127
    你那样转化越界了
      

  2.   

    所以当你的int是 0到256时,转换后的byte 值为当前int值减去256
    比如:int num1=129;那么转化后为-127其他情况也是和256有关系,倍数关系的加减
      

  3.   

    byte的范围是-128 到127
    越界.
      

  4.   

    这是因为不同数字类型的存放和读取规则不同:
    int 4字节:00000000,00000000,00000000,10000001 (读为:129)
    byte 1字节:10000001 (读为:-127)
    均为补码形式读出.
      

  5.   

    byte的范围为-127 ~ 128,当byte的值大于128时,就显示为负数,因此两个byte数相加可能产生相减的结果,避免的方法,是用int来表示byte b = 150;
    system.out.println(b) : -106int in = b & 0x000000ff;
    system.out.println(in): 150这样in就显示为正数了,原因是对byte进行int提升后为0xffffff96,取其最低字节为byte的绝对值。
      

  6.   

    java虚拟机的浮点支持IEEE-754 1985浮点标准,^_^,回去翻一下组成原理书吧!
      

  7.   

    首先要搞清楚,byte型是8位.print函数永远是调用该类型的toString方法,也就是说将byte型作为一个有符号整数进行输出.
        第二点,机器数的存放是用补码,有了这两条,就可以来分析楼主说的题了
        
        129:00000000 00000000 00000000 10000001(整数的补码就是其本身)
        转换成byte:10000001
        注意首位变成1,说明这是个负数!对100000001减1去反加负号(补码-原码),得-01111111,即-127    128: 00000000 00000000 00000001 10000000
        byte:10000000
        减一取反加负号:-10000000,即-128    256: 00000000 00000000 00000001 00000000
        byte:00000000 即0    257: 00000000 00000000 00000001 00000001
        byte:00000001 即1    够详细了吧,名牌大学软件学院的高才生理论果然是扎实啊,哈哈!
      

  8.   

    njwangchuan(川儿) ( ) 信誉:100  2005-07-08 12:10:00  得分: 0  
     ----------------------------------------------------------------
    呵呵,你到是够臭屁的,不过分析确实比较详细。
      

  9.   

    njwangchuan(川儿) 
    解释的够清楚了,无话可说
      

  10.   

    to  njwangchuan(川儿) 
    说得很清楚了,基础扎实,赞一个!