short a = 128, byte b = (byte)a 强制类型转换
2013-09-12 12:46 sara的小窝 阅读(13604) 评论(2) 编辑 收藏 举报1 package 笔试; 2 3 public class ShortToByte { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 short a=128; 11 byte b=(byte)a; 12 System.out.println("short强制类型转换为byte时,a="+a+","+b); 13 byte a1=(byte)128; 14 byte b1=(byte)(-129); 15 System.out.println("int强制类型转换为byte时,a1="+a1+",b1="+b1); 16 } 17 18 }
执行结果为:short强制类型转换为byte时,a=128,-128
int强制类型转换为byte时,a1=-128,b1=127
跟计算机的数据表示格式有关:负数用补码表示。
byte类型的数据取值范围是:-128-127,
例如:byte a=(byte)128;
byte b=(byte)(-129);
a和b得值分别为-128和127.
这个是Java编码方式决定的,Java中正数用源码表示,负数用补码表示,第一位是符号位。
所以对于128和-129,他们的编码分别是:
0000 0000 0000 0000 0000 0000 1000 0000
和1111 1111 1111 1111 1111 1111 0111 1111。
使用强制类型转换之后得到的a和b分别是1000 0000和0111 1111。
对于a来说,1000 0000是负数(第一位为1),它的绝对值是1000 0000即128,
而对于b来说,0111 1111是正数,值为127。
强制转换的截位本身就带来数据的损失,所以出来的结果比较怪也是正常。