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呢
展开
 我来答
shy2850
2011-01-03 · TA获得超过6774个赞
知道大有可为答主
回答量:2505
采纳率:55%
帮助的人:1584万
展开全部
这样说的话你可能更好理解了:
(short)-128还是能够对上(byte)-128的,这个是极小值的对应;
如果是(short)-129,对不上了,就要从最大值对应了,对应的是127;
-134 = -129-5 ; 127-5 = 122;对上了。

这里以byte为例。
其实大范围的数据类型向小范围数据类型转换的时候,不够最小值的先加256,一直到超过最小值,就OK 了,超过最大值的就先减256,减到合适时就OK了。

这是因为:在进行这样的转换的时候,高位(超出小数据类型可容纳的位数)是要完全舍弃的,即高位的位权至少也是256的倍数,这样的运算方式是科学的。
talentxyt
2011-01-03 · 超过27用户采纳过TA的回答
知道答主
回答量:95
采纳率:0%
帮助的人:71.4万
展开全部
-134用16位(字)的表示形式是1111 1111 0111 1010
而BYTE(字节)是8位,也就是将上面表示形式中的前8位去除,结果显示为0111 1010
换算成10进制也就是122
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szyshf
2011-01-03 · 超过17用户采纳过TA的回答
知道答主
回答量:95
采纳率:0%
帮助的人:45万
展开全部
一个byte占8个字节,所以不会超出范围。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xxinglin
2011-01-03 · 超过12用户采纳过TA的回答
知道答主
回答量:26
采纳率:0%
帮助的人:18.2万
展开全部
初步估计是通过补码计算出来的结果,由于Byte.size,即二进制补码的值为8,所以计算出来的结果是-122!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-01-03
展开全部
mark
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式