回过头看一看JAVA的基础性东西和细节性的东西,对int , byte的相互转换有了一丝兴趣。
我们都知道java类型转换分为自动类型转换和强制类型转换,从小范围到大范围是是自动类型转换,从大范围到小范围是强制类型转换。int 的范围是-2147483648,2147483647 ,而byte的范围是-128------127。
(1)byte转换为为int(自动转换)
在JAVA中如果你定义的byte类型的字面常量在正确范围之外,那么就会报错。
(2)int转换为byte(强制类型转换)
必须强制转换,当int的值没有超过byte的范围是长长转换,否则就会转换为其他数,但不会报错。
如果不在范围内 计算机会给出另外一个值:
看: int i=13;
byte b=(byte)i;
结果:b = 13;
看: int i=999;
byte b=(byte)i;
结果:b = -25;
为什么得到的是-25?我很好奇,通过找规律求得公式
127 int ->byte 127
128 int ->byte -128
129 int ->byte -127
130 int ->byte -126
....
256 int ->byte 0
257int ->byte 1
...
383int ->byte -128
383 int ->byte -127
....
中间的有些值可能计算的不正确差1,他是这样做到,首先byte的范围在-128到127,这样的话int类型的数如果在这个范围内,那么就是正确的,否则就是不正确的。我自己研究了一下,如何得到这样的数
公式: byte b = (i+128)%256+(-128); 就得到转换过的数。