黑马程序员技术交流社区
标题:
这两天有一个关于运算的问题没想明白
[打印本页]
作者:
lucy198921
时间:
2013-3-20 23:12
标题:
这两天有一个关于运算的问题没想明白
本帖最后由 lucy198921 于 2013-3-21 21:23 编辑
以下这个Demo的运算结果为什么是44?
class Demo {
int y = 3;
public static void main(String[] args) {
int x = 173;
byte b = 127;
x = x + b;
b = (byte)(b + x); // 明明byte型会自动提升为int型运算,运算结果x=300我可以理解,但是为什么b=44?
System.out.println(b);
System.out.println(x);
}
}
还请各位高手指教.谢谢
作者:
何红卫
时间:
2013-3-20 23:30
byte类型的范围应该是-128-127,超范围截断了吧
作者:
lucy198921
时间:
2013-3-20 23:37
何红卫 发表于 2013-3-20 23:30
byte类型的范围应该是-128-127,超范围截断了吧
求详解,上图表示的话更好.
作者:
lxww
时间:
2013-3-20 23:40
byte类型的取值范围是-128到127,如果运算得到的值不在这个范围内,会从头开始,不会超过这个范围。b+x=127+300=427的溢出了。强转的,然后会从头计算。300-128-128=44.就是-128到127之间是两个128的数。300属于溢出的部分,因为强转成byte类型,所以它一直减去128,值到得到的值在-128到127范围内就行。
作者:
爪哇攻城狮
时间:
2013-3-20 23:42
b不是44吧。肯定是负数
作者:
爪哇攻城狮
时间:
2013-3-20 23:55
等于-85哦!!!
因为Byte取值范围为 127~ -128
127+300=427 溢出了 427-256 =171 171-256=-85
-85在byte的值范围
作者:
葛晓红
时间:
2013-3-21 00:11
不会吧,我运算的结果b=-85啊!b = (byte)(b + x); 这一步中,b自动转换成int型进行运算,运算结果为427(int型),强制转换成byte类型时 ,保留int类型的低八位,其他的三个字节舍去,byte中第一位为符号位为1表示负数(表示-128),后面的部分为43,则其结果为-85!
作者:
江公亮
时间:
2013-3-21 09:40
本帖最后由 江公亮 于 2013-3-21 10:39 编辑
b=byte(b+x),括号里面的是427,而427的二进制是
110101011
,byte转型后,只取低八位,也就是
10101011
=-85,
所以b就是-85了,不应该是44吧,。
作者:
陈丽莉
时间:
2013-3-21 15:41
记得及时处理帖子哦,继续追问,或将分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2