标签:

这两天看了《编码的奥秘》里面的二进制加法机及其后面的减法功能的实现,就用Python实现了一个类似功能的加法器出来。

先说一下整体的思想。

由于操作数都是二进制,所以计算简单了许多。首先,运算需要逐位操作,两个二进制数相加使用AndGate即可,但是重点在于要区分出来“和”和“进位”,分别使用XorGate和AndGate实现, 这就搞定了半加器。然后,需要考虑右一位的进位,所以需要一个CI(carry in),然后将本位的sum和右一位的carry in再放到一个半加器里面。再然后,要想明白不管是一开始的两个数产生进位,还是由于后来得到了进位输入产生了进位,总之只可能只有一个进位,所以将两个半加器的CO(carry out)通过OrGate得到最终的进位,第二个半加器和就是最终的和。这就搞定了全加器。如下图:

然后需要的就是把八个相同的连在一起就行了:

减法的实现相对稍微复杂一点,因为减法存在借位,所以首要思想是,要以加法取代减法,所以对于a-b,需要将它替换为(a+(11111111-b)+1)-100000000 这样的形式,这样的话11111111-b就不会借位。然后就是如何搞定11111111-b,这需要求b的反码(也叫1的补数),即把1变0,0变1,实现上需要用到反向器,但是考虑到要和加法一起实现,所以需要使用一个XorGate并用一个标志SUB来标示是加法操作还是减法操作,也同样用来在最前面通过CI实现加1和在最后一步舍去最前面的1(具体过程请看书)。主要图示如下:

到此为止,就全部搞定了。

然后我以Python中函数的定义来代替逻辑门的定义,写了如下的加法器:

1 #!/usr/bin/env python

2

3 defAnd(a, b):4 return int(a andb)5

6 defOr(a, b):7 return int(a orb)8

9 defNand(a, b):10 return int(notAnd(a, b))11

12 defXor(a, b):13 returnAnd(Nand(a, b), Or(a, b))14

15 defHalf_adder(a, b):16 s =Xor(a, b)17 co =And(a, b)18 returns, co19

20 defFull_adder(a, b, ci):21 s, co1 =Half_adder(a, b)22 s, co2 =Half_adder(ci, s)23 co =Or(co1, co2)24 returns, co25

26 def Eight_bit_adder(x, y, sub): #sub=0:add, sub=1:subtract

27 y =list(y)28 for i inrange(len(y)):29 y[i] =Xor(sub, y[i])30 ans = [Full_adder(int(x[7]), int(y[7]), sub)]31 for i in range(6, -1, -1):32 ans.insert(0, Full_adder(int(x[i]), int(y[i]), ans[0][1]))33 ans.insert(0, (Xor(sub, ans[0][1]), None))34 for eachBit inans:35 printeachBit[0],36

37 if __name__ == ‘__main__‘:38 print ‘Select an operator and enter two binary numbers to get their sum or diff‘

39 o = raw_input(‘(A)dd / (S)ubtract:‘).strip().lower()[0]40 x = raw_input(‘x:‘)41 y = raw_input(‘y:‘)42 if o == ‘a‘:43 sub =044 elif o == ‘s‘:45 sub = 1

46 Eight_bit_adder(x, y, sub)

同时,实现减法一章最后讲到,如何使用二进制表示有符号数,也让我对计算机内部的世界更加了解。今天就先说到这里吧。

标签:

python二进制加法_Python实现二进制加法器相关推荐

  1. python读取二进制文件_python读取二进制流 Python二进制方式读写文件 - 电脑常识 - 服务器之家...

    python读取二进制流 Python二进制方式读写文件 发布时间:2017-03-18 来源:服务器之家 这两天用Python解析ELF二进制文件,遇到了不少问题,总结整理如下,以便加深对Pytho ...

  2. 用python做加法_Python不用加减乘除做加法

    将两个数的加法看作两步,第一步是两个数相加但是不进位,第二步是记录之前的两数相加应该进位的地方加上前一个相加但是不进位的数.对于具体的两个不小于0的数m和n,第一步可以看做m和n的异或运算m^n,第二 ...

  3. python二进制程序_python中的二进制加法程序

    这是一个探索布尔逻辑的好机会.在 像这样的二进制加法器可以用两个"半加法器"和一个"或"来完成 首先是"半加器",它是一个异或,给你一个求和 ...

  4. python能以文本和二进制方式处理文件_Python文件处理之文件写入方式与写缓存(三)...

    Python的open的写入方式有: write(str):将str写入文件 writelines(sequence of strings):写多行到文件,参数为可迭代对象 首先来看下writelin ...

  5. python输出二进制数字_Python获取数字的二进制值

    我们都知道在计算机中所有的信息最终都是以二进制的0和1来表示,而有些算法是通过操作bit位来进行运算的,这就需要我们了解Python中如何去表示二进制,又如何是进行位运算的. 二进制的表示 首先在Py ...

  6. python图片转为二进制流_python将图片转为二进制-女性时尚流行美容健康娱乐mv-ida网...

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页  > 高级搜索 mysql 5.7.9 lin ...

  7. python输出二进制数_Python二进制表示和位操作

    我们都知道在计算机中所有的信息最终都是以二进制的0和1来表示,而有些算法是通过操作bit位来进行运算的,这就需要我们了解Python中如何去表示二进制,又如何是进行位运算的. 二进制的表示 首先在Py ...

  8. 使用Python,OpenCV,本地二进制模式(LBP)进行人脸识别

    使用Python,OpenCV与本地二进制模式(LBP)进行人脸识别 1. 效果图 2. 原理及步骤 2.1 原理 2.2 步骤 3. 源码 参考 在深度学习和暹罗网络之前,面部识别算法依赖于特征提取 ...

  9. 具有Python&OpenCV的本地二进制模式

    具有Python&OpenCV的本地二进制模式 1. 效果图 2. 原理 2.1 项目结构 2.2 数据集构建 2.3 什么是本地二进制模式? 3. 源码 参考 这篇博客将介绍如何使用本地二进 ...

最新文章

  1. 这代码她不美吗?——试题 基础练习 十六进制转八进制
  2. ProE复杂曲线方程:Python Matplotlib 版本代码(L系统,吸引子和分形)
  3. IoTSharp部署教程-Sqlite分表篇
  4. php gis,对php代码混淆的研究
  5. Python字符串常用函数使用详解(内附详细案例)
  6. 推荐系统中粗排扮演的角色和算法发展历程
  7. 设计模式(七): 通过转接头来观察适配器模式(Adapter Pattern)
  8. Postgres 数据库大批量单表导入数据引发性能故障的处理
  9. Bias and Variance with Mismatched Distributions
  10. 类似金山打字的窗口打字游戏代码版--注释很多,不用讲解
  11. c语言注释部分两侧的分界符号分别是,C语言程序设计基础教程 - 习题答案
  12. TBSchedule源码学习笔记-启动过程
  13. 概率论基础-严士健 第二版 习题与补充3.3答案
  14. Linux安装Vmware Workstation
  15. 圣诞帽php,微信小程序“圣诞帽”的实现方法
  16. 视觉SLAM笔记(64) 八叉树地图
  17. 微信小程序 开发者工具和真机调试都能正常请求访问,线上不能登录请求问题
  18. 快速上手Android蓝牙串口开发
  19. oracle启动实例界面,oracle 11g 启动数据库实例
  20. vue项目中汉字转拼音

热门文章

  1. phpmyadminV4.8.1本地文件包含漏洞复现
  2. 磨金石教育插画技能干货分享|插画怎么配色才好看?
  3. 华为手机如何添加门禁卡(加密)
  4. 批量处理数据的三种方式
  5. OMS标准 第二卷 主要通讯 4.5.1 2022-12(中文手翻版本)
  6. 奋斗中最美坐标--中国女企协与清华社科院交流践行人类命运共同体
  7. Unity实现在安卓手机上触屏控制转向--控制对象为飞机
  8. 软件工程—理论与实践
  9. 用友872服务器系统,用友872应用服务器配置
  10. PXA270处理器PCMCIA/CF接口设计及WinCE5.0驱动实现