A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清凉 中级黑马   /  2016-7-5 08:04  /  965 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte a=130
System.out.println(a);
为什么结果是-126.

7 个回复

倒序浏览
byte是一个字节,占有8位,取值范围为  -128~+127,你这个130超出其范围了
回复 使用道具 举报
byte是一个字节,占有8位,取值范围在 -128~+127,130超出其范围了,可以用二进制来求解。
回复 使用道具 举报
130是int类型的字面值常量,而byte范围最大只能表示127,所以程序会自动强制类型转换。过程如下:
130的补码是:
00000000 00000000 00000000 10000010
byte a = 130;这句执行完成之后,会将130进行强转,转成byte类型,所以结果是:
10000010  // 这里也是补码
把该结果转成原码,就是-126,过程如下:
10000010  // 补码
10000001  // 反码 = 补码 - 1
11111110  // 源码 = 反码的符号位不变,数值为取反,结果就是 -126
纯手敲,请采纳。

回复 使用道具 举报 1 0
楼上高手
回复 使用道具 举报
这一句是会报错的,byte类型取值范围是-128~127之间,而130是超过了这个范围
如果硬要输入130,则应该是byte a = (byte)130; 这样的格式,而输出的值是-126是因为超出了127的范围
回复 使用道具 举报 1 0
上面两个支持是我点的{:2_36:}{:2_36:}O(∩_∩)O哈哈~
回复 使用道具 举报
从-128到127 再转一圈!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马