class Hello
{
public static void main(String[] args)
{
byte a=100;
byte b=120;
byte c=(byte)(a+b);
System.out.println(c);
}
}
1.相加超出byte范围  怎么出来1个负的数???
2.而float ,double怎么就不出(报错)??

解决方案 »

  1.   

    byte 类型所代表的数的范围是-128到127 ,a+b显然已经越界了;
    而float 类型和 double 类型数的为4e-45~3.4e+38 和 4.9-324~1.7e+308
      

  2.   

    1个byte是8个bit 也就可以表示256个数
    java中用它来表示-128~127 这一整数段二进制数 01111111表示127
    它的下一顺序位10000000 直接对应的是128 但因为需要它表示的是有符号数
    所以10000000就用来表示了-128 转换方式是反码+1(二进制) 同理对应129的10000001
    就用来表示有符号数-127了
    程序中的220 即 11011100 经反码+1后 =>00100100 是十进制的36
    所以最后显示结果就是-36
      

  3.   

    byte 有效范围8 bits  超出范围了
    float 有效范围32 bits
    double 有效范围 64 bits
      

  4.   

    1.byte类型变量的取值范围是从十进制的-128到127,100加上120之后的值是220,出现溢出。至于为什么是负数,我也不清楚,请高手帮忙回答下。
    2.220在float和double所能表示的范围之内,所以不会出现溢出,没有报错。
      

  5.   

    System.out.println(c);这个打印语句的问题,可以输出BYTE型吗?
      

  6.   

    byte表示范围: -127 - 128  
      

  7.   

    补充:java没有 unsign 类型的,呵呵! 否则是0-255 才对
      

  8.   

    byte 8位总共256个取值。。在JAVA中取值范围是-128---127。。
    而你的a+b=220超出了范围当然按负数处理了
      

  9.   

    我也是刚学 不过我知道 byte的范围有限(-127~128)  对于大的数就会溢出  你应该是溢出吧 相加溢出 
      

  10.   

    一个byte只有8位,只能表示-128到127的数
    最高位为符号位
    超出范围就循环
    如128就等于-128
    256就等于0
    你的220就等于-36其他的没错因为没超出范围
      

  11.   

    byte类型所代表的数的范围是-128到127,a+b显然已经越界了
      

  12.   

    byte 在内存里只占一个字节,即八位。a + b = 220,超出了范围。
    执行byte   c=(byte)(a+b); 时(a+b)自动转换为int型,int 型是四个字节的,三十二位,应为:
    0000 0000 0000 0000 0000 0000 1101 1100
    强制转换为byte型时,在内存中只保存到四个字节中的一个字节,即是保存了八位,为:
    1101 1100
    计算机中是用补码来表示,所以输出的是-36。
    float,double 那些没问题