开发者社区 问答 正文

为什么二进制取反加一的操作是可逆的?

补码取反加一是原码
原码取反加一是补码
求大神解释一下

展开
收起
a123456678 2016-06-12 10:35:35 2535 分享 版权
1 条回答
写回答
取消 提交回答
  • 设原码为A,用N位二进制数字表示。则:

    取反后得:2^N-1-A;(这一步是因为反码和原码的和是2^N-1得到的)
    加一后得:2^N-A,即补码,记为B;
    再取反后得:2^N-1-B,即2^N-1-(2^N-A)即A-1;
    再加一后得:A。
    完毕。

    以上证明了:~(~A+1)+1=A。

    其实可以这样理解:

    首先~(~A)=A很好理解吧,因为一个数取反两次肯定等于原数嘛。
    然后两次加1,分别是在取反一次后和取反两次后进行的。所以两次性质相反,相当于一次是+1一次是-1,抵消了。
    推广一下就是:~(~A+M)+M=A

    2019-07-17 19:33:23
    赞同 展开评论
问答地址: