本帖最后由 syb012 于 2015-10-16 18:36 编辑
知识回顾:
正数的原码反码补码都是它本身
负数的原码第一位表示符号, 其余位表示值。(负数的二进制原码最容易转换成十进制,比如原码1000 0001=-1,原码1000 0011=-3)
负数的反码是在其原码的基础上,符号位不变,其余各位取反。(从负数的原码很难一下子看出对应的十进制数是多少)
负数的补码是在其原码的基础上,符号位不变,其余各位取反,再加1。(同反码,补码也很难看出对应的十进制数是多少。计算机中都是用补码来表示数字的)
解决问题:
现在看130对应的二进制是int类型
0000-0000 0000-0000 0000-0000 1000-0010
强制转换成byte类型后 是1000-0010,丢失精度,可以看出变成了一个负数
因为计算机中都是用补码储存数字的,所以1000-0010是一个补码,想得出它对应的十进制数,必须把补码转换成原码。
负数的补码是在原码的基础上,符号位不变,各位取反,再加1。那么补码转换成原码就是相应的逆过程。
补码1000 0010
- 0000 0001
----------------
1000 0001
原码11111110=-126 (负数的原码第一位表示符号, 其余位表示值。)
所以那个被推荐的解答其实是错误的,那个解答混淆了原码反码补码。
|