日期:2014-05-20 浏览次数:20945 次
int a = -1; byte b = (byte)a; char c = (char)a; System.out.printf("a=%d, b=%d, c=%d, (int)b=%d, (int)c=%d\n", a, b, (int)c, (int)b, (int)c); //可见 (int)b还是==-1,但是(int)c就不再是-1了,也就是char向高字节int转换时, //符号位不扩展(因为char是无符,也就是没有符号位之说,所以也就没有符号位扩展), //而byte有符,所以符号位扩展 至于每个类型是否有符,可以查看其最大值最小值 System.out.printf("byte-min:%d, byte-max:%d, char-min:%d, char-max:%d, int-min:%d, int-max:%d\n", Byte.MIN_VALUE, Byte.MAX_VALUE, (int)Character.MIN_VALUE, (int)Character.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE);
------解决方案--------------------
-1
-> (byte有正负) 11111111
-> (char只有正数)是负数扩展符号位1 但变为正数 1111111111111111
-> (int有正负)是正数扩展符号位0 0000000000000000 1111111111111111
=