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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

byte by = (byte)130,结果是多少呢?计算过程是什么样的呢?

12 个回复

倒序浏览
结果应该是-126!
回复 使用道具 举报
电[img]脑 底层用的是  补码计算的
原码 反码 补码
正数的原码反码补码相同,C:\Users\Administrator\Desktop\无标题.png
回复 使用道具 举报
你看图片

无标题.png (41.19 KB, 下载次数: 48)

无标题.png
回复 使用道具 举报
912392824 来自手机 中级黑马 2016-4-14 19:00:17
报纸
这个会强制类型转换,所以输出结果不是130
回复 使用道具 举报
把130转换成二进制为10000010,这个是补码,然后将其减去1得到反码100000001,然后将其高位不变其他位取反得到原码11111110,最高位是1代表负数,后七位为126,因此结果为-126
回复 使用道具 举报

我这方面学的 不太好
我能不能这样理解:
130超出了byte范围 属于int类型了
它的二进制码是 0000-0000 0000-0000 0000-0000 1000-0010
而强制转换为 byte类型时 byte 是一个字节 8位  
刚好把 1000-0010 放进去,但是 首位为1 那么它就是一个负数
然后给他取反加一 算出它的值 然后加上负号,
1000-0010 除去首位1不变外 其他位取反变成 1111-1101 ,然后加一 变成 1111-1110 首位1不算 其他七位111-1110 是十进制126 加上负号 得出 -126
可能啰嗦了点  
回复 使用道具 举报
就用原码补码   结果-126
回复 使用道具 举报
1、首先,java的正整数都会默认为int类型,所以130在强制转型之前,是int类型的数据
2、此时130的二进制码是(原码):
     0000 0000 0000 0000 0000 0000 1000 0010
3、最高位是符号位,0代表正数1为负数,然而计算机运算的时候会事先将所有数据转成补码在运算
     而且正数的原码反码和补码都是一样,的所以130的补码同样是:
     0000 0000 0000 0000 0000 0000 1000 0010
4、正整数的原码转成补码后,就开始强制转型了,因为byte的取值范围是 -2^7~2^7-1
     所以byte类型的数据包含8个二进制位,最高一位属于正负符号位,所以不能计入取值范围
5、我们将int类型数强转为byte类型,就是直接把上面的二进制码超出第八位的所有数字都砍掉,
     因此,我们获得了强转之后的补码
     1000 0010
6、如果要获得这个补码的真实结果,我们还需要把它转化成原码,再计算它的十进制数值:
     1000 0010的反码是:(所有位数减一,最高符号位不变)
     1000 0001
     以上反码的原码是:(所有位数取反,符号位不变)
     1111 1110
     根据以上原码计算二进制:
     首位是1,是一个负数,其余用8421码进行计算得出结果为 -126
回复 使用道具 举报
好厉害,学到东西了!!!
回复 使用道具 举报
Open 中级黑马 2016-4-15 13:32:21
11#
由底层补码实现,因为130超过啦byte的精度范围,而此时又对其强制类型装换为byte。故此值为-125
回复 使用道具 举报
我也学会了怎么解
回复 使用道具 举报
把130转换成二进制为10000010,这个是补码,然后将其减去1得到反码100000001,然后将其高位不变其他位取反得到原码11111110,最高位是1代表负数,后七位为126,因此结果为-126,这个应该是很详细的了,多理解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马