黑马程序员技术交流社区

标题: 强制转换的问题 [打印本页]

作者: 清凉    时间: 2016-7-5 08:04
标题: 强制转换的问题
byte a=130
System.out.println(a);
为什么结果是-126.
作者: 13182002757    时间: 2016-7-5 08:23
byte是一个字节,占有8位,取值范围为  -128~+127,你这个130超出其范围了
作者: qq472792548    时间: 2016-7-5 16:37
byte是一个字节,占有8位,取值范围在 -128~+127,130超出其范围了,可以用二进制来求解。
作者: huangruqi888    时间: 2016-7-5 18:47
130是int类型的字面值常量,而byte范围最大只能表示127,所以程序会自动强制类型转换。过程如下:
130的补码是:
00000000 00000000 00000000 10000010
byte a = 130;这句执行完成之后,会将130进行强转,转成byte类型,所以结果是:
10000010  // 这里也是补码
把该结果转成原码,就是-126,过程如下:
10000010  // 补码
10000001  // 反码 = 补码 - 1
11111110  // 源码 = 反码的符号位不变,数值为取反,结果就是 -126
纯手敲,请采纳。


作者: tiamo305    时间: 2016-7-5 19:31
楼上高手
作者: Maroon    时间: 2016-7-5 19:39
这一句是会报错的,byte类型取值范围是-128~127之间,而130是超过了这个范围
如果硬要输入130,则应该是byte a = (byte)130; 这样的格式,而输出的值是-126是因为超出了127的范围
作者: 新人—小明同学    时间: 2016-7-5 21:28
上面两个支持是我点的{:2_36:}{:2_36:}O(∩_∩)O哈哈~
作者: caesar_QMwS4    时间: 2016-7-5 21:31
从-128到127 再转一圈!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2