专栏名称: 码农翻身
工作15年的前IBM架构师分享好玩有趣的编程知识和职场的经验教训, 不容错过。
目录
相关文章推荐
蚂蚁技术AntTech  ·  语言智能并非自回归机制独有,详解扩散语言模型 ... ·  16 小时前  
程序员技术  ·  某程序员:感觉身边35岁后月薪稳定在40k以 ... ·  17 小时前  
伯乐在线  ·  HR ... ·  昨天  
伯乐在线  ·  HR ... ·  昨天  
码农翻身  ·  投诉领导被光速开除,和烂人说再见啦~ ·  2 天前  
程序员小灰  ·  39岁的小灰,再也回不去童年了! ·  3 天前  
51好读  ›  专栏  ›  码农翻身

张大胖的加法器

码农翻身  · 公众号  · 程序员  · 2016-12-28 20:01

正文

请到「今天看啥」查看全文



“这很简单, 对于二进制, 前辈们想出了一个异常简单, 又特别适合计算机的算法, 对二进制数的所有位取反, 然后加1

“神奇啊, 前辈们竟能想出这么巧妙的办法 !”


“这就是所谓的 补码 了” Bill总结道


负数的表示


Bill 问道: “刚才咱们说的都是整数的加减法,  负数你考虑了没有啊?  大胖?”


“我也刚刚想到, 现在我知道 7-3  可以换算成 7+ 13  了,  如果是3 - 7 呢? ”


“负数一引入, 系统就变得更复杂了, 首先你得用一个标志位来表示整数还是负数吧: ”


(表格1)


张大胖说: “明白了, 最高位的0 表示正数, 1 表示负数, 真正有效的数字只剩下3位了, 正数的范围是从1 到7 ,  负数的范围从 -1到-7 ,  不过这里出现了两个零! 一个正0 , 一个负0 , 这不妥吧。”


“先别急, 之前说到减法可以变成加法, 秘密就是用补码,   例如8-3 相当于8+(-3)的补码 , 那我们完全可以把表格1中的负数用补码表示, 然后把那个负0 特别当做 -8来处理:


Bill 接着说: “按照上面的表格, 现在我们来计算一下 7-4 ,   7是 0111, -4是 1100, 注意我们把符号位也算进去了 , 两者相加:


“让我试试4-7, ” 张大胖说, 4是0100 , -7是1001, 两者相加:



“妙啊”   张大胖不禁赞叹起来, “把负数用补码表示,不但减法变加法,  连符号位都可以参与运算了!”


“ 是啊, 我们通过补码能极大的简化电路的设计, 你一定要记住, 在计算机内部,是使用补码来表示二进制数, 如果是一个正数, 补码就是它本身,  如果是个负数, 需要把除了符号位之外的二进制数进行取反加一的操作"







请到「今天看啥」查看全文