• Rocket


     
    介绍布尔代数最小项与最大项相关概念,以及Term类的实现。
     
     
    参考链接:
     
     
    1. 几个定义
     
     
    2. Term
     
     
    Term即是一个项,最大项或最小项。
     
    由变量ABCD组成的项AB',包含如下信息:
     
    1) 项中包含的变量
     
    最小项由ABCD四个变量组成。项AB'只包含了AB两个变量。
     
    在Term中,由mask决定项中有哪些变量:
    a. mask为1的位对应的变量不在项中出现,如变量CD在项AB'中的mask为1;
    b. mask为0的位对应的变量在项中出现;
     
    2) 每个变量的值
     
    项中的每个变量或者以原变量的形式出现(如A),或者以补变量的形式出现(如B')。
     
    在Term中,值存在如下情况:
    a. mask为1的变量,即不在项中出现的变量,其值为0;
    b. mask为0的变量,即在项中出现的变量,其值为0或1;
     
    3) 最大项和最小项
     
    项中每个变量的关系,是与(乘)的关系,还是或(加)的关系;亦即项是最小项,还是最大项。
     
    在Term中,没有表达这种关系。只表达了变量及其值。至于是最大项还是最小项,取决于如何使用。
     
    如DecodeLogic中,无论是minTerms还是maxTerms都可以传给Simplify作为minterms参数:
     
    Simplify定义如下:
     
    3. BitPat与Term
     
    BitPat通过term方法,转变为一个Term。其实现如下:
     
    因为Term中的mask与BitPat中相反,所以Term中mask为1的位对应的变量是不存在的变量。与BitPat中的意义相反。
     
    这里再提一下BigInt(2).pow(lit.getWidth) - (lit.mask + 1),其有两种理解方法:
     
    1) 2的补码
     
    mask补码 = 2^n - mask = ~mask + 1
    即:~mask = 2^n - mask - 1 = 2^n - (mask + 1)
     
    2) 1的补码
     
    对mask求1的补码,即是按位取反,即~mask。
     
    mask与~mask的和为n位全1的值,亦即2^n - 1。
    如0101 + 1010 = 1111 = 2^4 - 1
     
    所以:~mask + mask = 2^n - 1
    可知:~mask = 2^n - 1 - mask = 2^n - (mask + 1)
     
    其实2的补码的算法即取反加一,即是利用~mask + mask = 2^n - 1的特性:
    mask补码 = 2^n - mask = 2^n - 1 + 1 - mask = (2^n - 1 - mask) + 1 = ~mask + 1.
     
     
  • 相关阅读:
    git add 添加错文件 撤销
    工作流Activiti5.13学习笔记(一)
    instanceof, isinstance,isAssignableFrom的区别
    oracle表查询速度极慢的处理过程记录一下
    类里面的成员变量如果是public,为什么破坏封装
    IPv4 IPv6验证
    枚举使用
    XML之命名空间的作用(xmlns)
    XSD-JAVA
    jaxb
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10290061.html
Copyright © 2020-2023  润新知