php网站开发 vip,南沙滩做网站公司,德州汇泽网站建设,templatemonster wordpress注意#xff1a;计算机实际上是按照补码进行存储的#xff0c;对计算机来说没有原码和反码这种东西#xff0c;原码和反码只是为了方便我们理解而定义的一种概念。
一、原码
正数的原码就是它本身#xff0c;负数的原码最高位为1。
如果用一个字节来存储整数#xff0c…注意计算机实际上是按照补码进行存储的对计算机来说没有原码和反码这种东西原码和反码只是为了方便我们理解而定义的一种概念。
一、原码
正数的原码就是它本身负数的原码最高位为1。
如果用一个字节来存储整数那么20的原码就是0001 0100-20的原码就是1001 0100
二、反码
正数的反码跟原码一样负数的反码按位取反符号位不变。
如果用一个字节来存储整数那么20的反码就是0001 0100-20的反码就是1110 1011
三、补码
正数的补码跟原码一样负数的补码是反码加1。
如果用一个字节来存储整数那么20的补码就是0001 0100-20的补码就是1110 1100
四、计算机为什么不用原码和反码而采用补码来计算
原因是使用原码或者反码计算结果是错误的补码才是正确的。
下面我们来看一下分别使用原码、反码和补码进行计算的结果
1、原码计算 0001 010020 1001 0100-20
------------------------------- 10101000-40
20和-20的和是-40结果显然不对
2、反码计算 0001 010020 1111 0101-10
-------------------------------- 0000 10019
20和-10的和是9结果显然不对
3、补码计算 0001 010020 1110 1100-20
------------------------------- 0000 00000
用反码计算的结果正确
五、为什么一个字节能表示的整数范围是-128到-127
首先最高位为0其他位为1就代表最大的整数就是0111 1111127那么最小的数应该是1000 0001-127
那么问题来了一个字节如何表示-128
我们结合上面的原码、反码和补码知识知道我们知道1000 0000-00111 11111271111 1111-1。这种情况下我们发现补码的计算也不准了-0与127的和居然是-1。刚刚不是还说用补码计算时正确的吗
为了解决这种特殊情况我们认为反码1000 0000表示的是-128不再表示-0-0本身也没有意义用0就可以了然后1000 0000-1280111 11111271111 1111-1漂亮所有情况下补码的计算都是正确的了。