黑马程序员技术交流社区
标题:
强制转换的疑问
[打印本页]
作者:
java陈辉
时间:
2013-12-27 14:29
标题:
强制转换的疑问
下面这段代码的b2的结果为什么是-76?怎么会出现了负数?求解释。
byte b1=60+20;
byte b2=(byte)(b1+100);
System.out.println(b2); //b2=-76,为什么是-76,怎么会出现了负数?
作者:
杨道红
时间:
2013-12-27 14:39
180->超过Byte的取值范围,2进制为:10110100
你再强制转换就是将这个数变成10进制,所以是负数,至于76,你看我下面的运算
1001011+1=1001100
作者:
75100313
时间:
2013-12-27 15:23
180二进制是 (00000000 00000000 00000000 ) 10110100 因为byte的范围是-128~127
所以超出范围 那么强转之后 取反
二进制 01001011 第一个0是符号位 -75
再减1 就是-76
作者:
柏涛
时间:
2013-12-27 18:41
你算完之后为180超出了byte的范围是(-128~127)
二进制为10110100 取反结果为 01001011
也就是 -75
再减1 就是-76
作者:
由然自美
时间:
2013-12-27 19:17
因为你强转了b1+100,而byte的最大范围是证的127,这个值超出了byte的最大范围
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2