对二进制减法的理解

以下内容是写在通过NandGame网站学习二进制运算的,但是没想到写了这么多,想着也可以单独发出来

写到这里突然想到最近在《编码:隐匿在计算机软硬件背后的语言》这本书看到二进制减法的运算,作者一开始不是直接讲减数要转换成补码再计算,而是讲了十进制减法为了不使用借位如何方便计算。比如61-19,由于1不够减需要向6借以一位,那么有没有什么办法不借位计算呢?可以利用十进制的补数实现,可以通过99-19=80,61+80=141,141-100+1=42,三个式子简化一下就是61+(99-19)-100+1,这个式子和61-19的结果是一样的,因为+100和-100其实就是0,这样子主要是不用借位,这样子计算对于人类来说太复杂了,毕竟简单的借位对人类来说很简单,为什么要提十进制的补数在减法的应用,因为二进制减法就是用了这个逻辑来实现的,减数为什么要取反?因为二进制的1111 1111-0001 0011=1110 1100,这里用八个1去减就相当于十进制的99去减,这样子不用借位同时刚好是减数的反码,0001 0011的反码就是1110 1100,接下来是被减数加上减数的反码,0011 1101+1110 1100=1 0010 1001,接着再加一,1 0010 1001+1=1 0010 1010,前面加了1111 1111 和1,接下来要减掉,1 0010 1010-1 000 000 =0010 1010,取得了二进制的补码。这样子在二进制的计算减法中也没用使用借位。文字和式子放在一起可能不好理解,单独把式子提取出来。

61(0011 1101)-19(0001 0011)补数的减法
十进制:
99-19=80
61+80=141
141-100+1=42
把上面三个合成一个式子:
61+(99-19)-100+1=42
二进制:
1111 1111-0001 0011=1110 1100(惊讶的发现0001 0011对每一位取反就是1110 1100)
0011 1101+1110 1100=1 0010 1001
1 0010 1001+1=1 0010 1010
1 0010 1010-1 000 000 =0010 1010

二进制的就不合成一个式子了,因为一合成那么多0和1更不好理解,整体来讲就是二进制的减法就是用了补数的逻辑实现的,这下就理解了二进制减数为什么要取反以及为什么要再加一,经过这两个操作被减数加减数得出的是原本两个数相减的结果。

posted @   长空nice  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示