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怎么就不出(报错)??
{
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怎么就不出(报错)??
而float 类型和 double 类型数的为4e-45~3.4e+38 和 4.9-324~1.7e+308
java中用它来表示-128~127 这一整数段二进制数 01111111表示127
它的下一顺序位10000000 直接对应的是128 但因为需要它表示的是有符号数
所以10000000就用来表示了-128 转换方式是反码+1(二进制) 同理对应129的10000001
就用来表示有符号数-127了
程序中的220 即 11011100 经反码+1后 =>00100100 是十进制的36
所以最后显示结果就是-36
float 有效范围32 bits
double 有效范围 64 bits
2.220在float和double所能表示的范围之内,所以不会出现溢出,没有报错。
而你的a+b=220超出了范围当然按负数处理了
最高位为符号位
超出范围就循环
如128就等于-128
256就等于0
你的220就等于-36其他的没错因为没超出范围
执行byte c=(byte)(a+b); 时(a+b)自动转换为int型,int 型是四个字节的,三十二位,应为:
0000 0000 0000 0000 0000 0000 1101 1100
强制转换为byte型时,在内存中只保存到四个字节中的一个字节,即是保存了八位,为:
1101 1100
计算机中是用补码来表示,所以输出的是-36。
float,double 那些没问题