补码取反加一是原码
原码取反加一是补码
求大神解释一下
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
设原码为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