java里类型转换问题!
publicclassHelloWorldApp{publicstaticvoidmain(String[]args){shorts=-134;byteb=(byte)s...
public class HelloWorldApp{
public static void main(String [] args){
short s=-134; byte b=(byte)s;
System.out.println(b);
}
}
运行结果b=122. 这是什么情况啊 我知道-134超出了byte的范围 可是为什么是122呢 展开
public static void main(String [] args){
short s=-134; byte b=(byte)s;
System.out.println(b);
}
}
运行结果b=122. 这是什么情况啊 我知道-134超出了byte的范围 可是为什么是122呢 展开
5个回答
展开全部
这样说的话你可能更好理解了:
(short)-128还是能够对上(byte)-128的,这个是极小值的对应;
如果是(short)-129,对不上了,就要从最大值对应了,对应的是127;
-134 = -129-5 ; 127-5 = 122;对上了。
这里以byte为例。
其实大范围的数据类型向小范围数据类型转换的时候,不够最小值的先加256,一直到超过最小值,就OK 了,超过最大值的就先减256,减到合适时就OK了。
这是因为:在进行这样的转换的时候,高位(超出小数据类型可容纳的位数)是要完全舍弃的,即高位的位权至少也是256的倍数,这样的运算方式是科学的。
(short)-128还是能够对上(byte)-128的,这个是极小值的对应;
如果是(short)-129,对不上了,就要从最大值对应了,对应的是127;
-134 = -129-5 ; 127-5 = 122;对上了。
这里以byte为例。
其实大范围的数据类型向小范围数据类型转换的时候,不够最小值的先加256,一直到超过最小值,就OK 了,超过最大值的就先减256,减到合适时就OK了。
这是因为:在进行这样的转换的时候,高位(超出小数据类型可容纳的位数)是要完全舍弃的,即高位的位权至少也是256的倍数,这样的运算方式是科学的。
展开全部
-134用16位(字)的表示形式是1111 1111 0111 1010
而BYTE(字节)是8位,也就是将上面表示形式中的前8位去除,结果显示为0111 1010
换算成10进制也就是122
而BYTE(字节)是8位,也就是将上面表示形式中的前8位去除,结果显示为0111 1010
换算成10进制也就是122
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个byte占8个字节,所以不会超出范围。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
初步估计是通过补码计算出来的结果,由于Byte.size,即二进制补码的值为8,所以计算出来的结果是-122!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-01-03
展开全部
mark
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询