public class wrenwren
{
public static void main(String argv[])
{
byte b = 0;
int i = 5000;
b = (byte)i;
//System.out.println(Integer.toBinaryString(i));
System.out.println(b);

}
}结果为什么是-120呢? 5000的后8位是1000 1000  应该是-8吧?

解决方案 »

  1.   

    它不是截取而是以轮回的方式来取溢出数据的
    byte from -128 to 127 in java
      

  2.   

    错了 10001000是136 放byte范围就是-120
      

  3.   

    byte只有127,到那里找5000??
    已经溢出了
      

  4.   

    取反加一就是用
    100000000 - self
      

  5.   


    为什么10001000是136 放byte范围就是-120呢??
      

  6.   

    对溢出数据的截取称为narrowing primitive conversion
    高位为1的binary value在java中约定为十进制负数
    转换规则为取反加一(binary operation)
    136 - 256 = -120(it's a convention) 
      

  7.   

    5000的后8位是10001000, 就是-120
    11111000才是-8解释一下:java是用补码来表示负数的,
     8 = 00001000, 那么-8的反码就是11110111,-8补码就是反码+1 = 11111000
    而120是01111000,同理-120 = 10001000