• 不记年
    2019-05-27
    基本电路>门电路>全加器>加法器,经历了三层的封装,分层可以带来很多好处,但经过这么多层的封装是不是也带来了性能的损耗,所以我想对于像加法器这样经常用到的电路,可不可以打破分层,直接通过最底层的电路来实现,以达到性能的最优呢。在进一步,性能和封装之间是否也存在着取舍呢

    作者回复: 不记年同学你好,

    你的思考很对,实际的加法器,并不是由全加器串联组成的,在14讲里面我们可以看到为了减少门延迟的损失,实际高位的计算结果直接来自低位的组合电路里面的输入。

    封装意味着我们提供了更多的“简单电路”或者说“简单指令”来操作。但这也意味着同样复杂的操作需要更多条指令。

    这个也是为什么在计算机体系结构里面会有 RISC 和 CISC 这样的复杂/精简 指令之争。

    
     9
  • 一步
    2019-05-24
    我们仍然是从左到右,一位一位进行计算,只是把从逢 10 进 1 变成逢 2 进 1。

    这里不应该是从右往左运算吗?

    作者回复: 一步同学你好,

    谢谢指出,的确是从右到左计算,我修改一下。

    
     7
  • 张立昊Leon
    2019-05-26
    负数用补码表示的话加法就和正数的加法没什么区别了,只是结果如果是负数的话,也是补码。发生溢出会有问题,最高位符号有可能会变,需要额外的标记位

    作者回复: 👍

    
     6
  • 南山
    2019-05-24
    打卡,5月24日03:45,坚持完整的学到底~

    作者回复: 加油

    
     5
  • 俊釆
    2019-06-04
    全加器图中没有U,这个是其他地方的进位信号?
     1
     4
  • kdb_reboot
    2019-05-26
    这部分就是本科学的数电了

    作者回复: 👍

    
     4
  • ldd
    2019-05-27
    课后思考:
    补码表示下,加法器也是可以正常运行的;因为补码的发明就是为了方便正负数的二进制计算。
    正数+负数是不会溢出的,所以加法器可以直接忽略最左边的进位;
    但是补码计算,还是会出现溢出的情况的,比如:假设二进制位数是4位,-8-2=6;7+2=-1 就算是溢出了;
    那么还是需要最右边的输出来判断是否溢出的:
    假设最右边的输入为a、b,输出为c,那么溢出位可以为 (~(a&b)) & c & (~(a&b)),输出为1,就代表溢出了,否则就是未溢出。

    不知道思考的对不对,有不对的地方,望老师指出。
    展开

    作者回复: 我不知道我有没有准确理解你的意思

    两个负数相加,是否溢出,其实不是看最后多出来的进位的信号。而是也要看计算结果的最高位是1还是0
    如果两个输入的高位是1而输出的高位是0,那么就溢出了,如果输出的高位还是1就没有溢出。

    你这里的a,b,c是不是指输入a,b和输出c的左侧的高位(不是进位的溢出位)?我的理解没有错吧?

    
     3
  • Knight²º¹⁸
    2019-05-24
    解答了我多年的疑惑
    
     3
  • DreamItPossible
    2019-08-13
    使用全加器可以实现使用补码表示的有符号数,正数加负数转换成正数加上这个负数的补码即可。
    如何检测溢出?
    首先,列举下两个有符号数相加产生溢出的条件:
    - 正数+正数
    如果结果为负数,则产生了溢出;
    - 负数+负数
    如果结果为正数,则产生了溢出;
    - 正数-负数
    如果结果为负数,则产生了溢出;
    - 负数-正数
    如果结果为正数,则产生了溢出;

    其次,可以根据最高数值位是否产生进位,以及符号位是否产生进位来判断是否有溢出发生,对应上面的四种情况就是:
    - 正数+正数有溢出,即最高数值位产生了进位,而符号位没有进位;
    - 负数+负数有溢出,即最高数值位没有产生进位,而符号位产生了进位;
    - 正数-负数有溢出,即最高数值位产生了进位,而符号位没有进位;
    - 负数-正数有溢出,即最高数值位没有产生进位,而符号位产生了进位;
    展开
    
     2
  • 铁皮
    2019-05-24
    课后思考题:
    用补码表示的话,这个加法器应该可以实现正数加负数。
    最左端如有溢出位的情况去掉就可以

    作者回复: 是的,不过可以思考一下两个负数的相加或者整数的相加是否也会溢出?怎么通过电路来告诉大家是发生了溢出?

    
     2
  • cc
    2019-05-24
    我们把两个半加器的进位输出,作为一个或门的输入连接起来,只要两次加法中任何一次需要进位,那么在二位上,我们就会向左侧的四位进一位。

    老师,这块没看懂。为什么任何一次需要进位,我们都要向四位进位呢?比如两个数分别是01和01,这样其实不用向四位进位的

    作者回复: cc同学你好

    的确不是每个计算都需要进位,但是我们的电路必须准备好可能发生进位。

    而进位的时候,可能来自当前位两个1的相加会发生进位。
    但还有一种可能,就是当前位只有一个1,但是从更低位又进位来了一个1,这样也需要向高位进行进位。

    
     2
  • 玉琢天窗
    2019-09-11
    老师,要想自己搭建一个电路实现1+1,需要哪些材料呢

    作者回复: 如果是写程序模拟的话有很多办法,比如有人用Minecraft 做了一个虚拟的CPU http://mc.163.com/2017/04/07/25535_682214.html

    如果是硬件,如果只是为了体验,最简单的办法是用电路绘画导电笔直接在纸上画了来体验一下

    或者也可以去淘宝上买个组合电路套件自己来搭一下。

     1
     1
  • Dashing
    2019-08-07
    看次高位进位与最高位进位,异或,为1溢出,为0,没有益处
    
     1
  • supermouse
    2019-05-26
    老师您好!请问「与非门」、「或非门」是将「与门」、「或门」计算得到的结果取反吗?

    作者回复: 是的,就是把与门和或门的真值表取反

    
     1
  • 冰激凌的眼泪
    2019-05-25
    突破1,两个输入,两个输出,简单门电路是两个输入一个输出
    突破2,三个输入,两个输出
    上面是加法器实现的基础
    简单门电路实现了半加器,进而利用半加器实现了全加器
    语句实现了简单函数,进而可以形成复杂函数
    
     1
  • Ant
    2019-05-24
    老师 图片 mp3等占用空间比较大的文件 编译的时候放在哪里阿

    作者回复: 一般情况下,这些是“数据”而不是“程序”,会放在单独的数据文件里面,在编译的过程中并不会用到。

    
     1
  • 小海海
    2019-05-24
    思考题: 反向推导,补码的设计本来就是要解决正数加负数的问题,使之可以当作普通的加法来进位即可,所以文章里的加法器模型应该是可以的

    作者回复: 回答正确,不过可以再想想补码情况下,如何处理溢出呢?

    
     1
  • 靠人品去赢
    2019-05-24
    这个加法器的组成,让我知道想通了int这些基本类型的范围具体是怎么回事(就给你16个全加器组成,结果溢出了超过16位,自然就超出int类型范围)。
    那想问一下,栈溢出,空指针这些日常喜闻乐见的是怎么回事,计算机怎么判定的呢。

    作者回复: 栈溢出我们在前面讲stackoverflow已经讲过啦,可以去看第7讲。

    空指针,其实也很容易里面,我们期望在某个数据里面放上一个内存地址,但是并没有真实设置对应的值,那么里面要么是对应内存初始状态,可能就是一个错误的地址,会导致程序出错呀。

    
     1
  • 活的潇洒
    2019-05-24
    今天提前一个半小时到单位,就是为了早点听音频做笔记,坚持完整的学到底,坚持完整的笔记到底
    day13 学习笔记:https://www.cnblogs.com/luoahong/p/10916066.html
    
     1
  • 小小灬厮
    2019-12-30
    与非:与运算后,取反
    或非:或运算后,取反
    异或:每个取反,再进行或运算
    
    
我们在线,来聊聊吧