黑马程序员技术交流社区

标题: byte类型-128在计算机中的二进制表示问题 [打印本页]

作者: NOTHIING    时间: 2016-9-5 21:02
标题: byte类型-128在计算机中的二进制表示问题
byte类型-128在计算机中二进制如何表示,网上查了很多资料,说的都很模糊,哪位高手能否给个答案

作者: HARRY_yFd0S    时间: 2016-9-5 21:46
1000 0000 0000 0000代表byte型-128的原码和补码。
先说原码,负数的原码一般是正数的原码将最高位改为1。假设128在byte范围内,它的“原码”为1000 0000 0000 0000(最高位为1 ,这不是正数的原码,这也是为什么byte最大只能存到127的原因)。将最高位变为1(它本身就是1),还是1000 0000 0000 0000。
再说补码,除最高位,后15位位取反加1。可是后15位取反加1后变为1000 0000 0000 0000超过了15的内容,产生溢出,所以只保留000 0000 0000 0000。加上最高位,补码为1000 0000 0000 0000
这个比较特殊,记住就好。
作者: heilashi    时间: 2016-9-5 21:54
为什么用补码进行底层运算,因为只有补码才能表示出0和-128。
作者: NOTHIING    时间: 2016-9-6 11:20
HARRY_yFd0S 发表于 2016-9-5 21:46
1000 0000 0000 0000代表byte型-128的原码和补码。
先说原码,负数的原码一般是正数的原码将最高位改为1。 ...

哥,byte 是8位的
作者: NOTHIING    时间: 2016-9-6 11:26
heilashi 发表于 2016-9-5 21:54
为什么用补码进行底层运算,因为只有补码才能表示出0和-128。

-128看来是特殊规定的了,用正常的源码和补码都无法解释
作者: HARRY_yFd0S    时间: 2016-9-7 09:24
看错了,但是是一样的。byte的原补码为10000000,short的原补码为10000000 00000000,int同理。
作者: NOTHIING    时间: 2016-9-7 09:42
HARRY_yFd0S 发表于 2016-9-7 09:24
看错了,但是是一样的。byte的原补码为10000000,short的原补码为10000000 00000000,int同理。 ...

那在byte中 -128就是特殊规定了,只有这也才能理解了




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