首页 > 解决方案 > 在 C++ 中快速计算最小项的总和?

问题描述

假设我们有一个字节代表一个最小项 sum,其中每个位代表 A、B、C 的一个特定最小项。例如,ms=0x12 应该代表

F(a, b, c) = (A & (~B) & (~C)) | ((~A) & B & (~C))

在这里你可以看到两项的总和

bit 2 is (~A) & B & (~C)

bit 4 is A & (~B) & (~C)

但是,当我们对某些项求和时,最终的方程可能会被简化,例如,0xF0 表示 4 项的和

F(a, b, c) = (A & B & C) | (A & B & (~C)) | (A & (~B) & C) | (A & (~B) & (~C))

然后完美地简化为F(a, b, c) = A

我正在寻找的是一种 C++ 方法,它可以快速计算MintermSum(A, B, C, minterm) A、B、C 是字节值的位置,并且minterm是一个表示为字节的最小术语集。

在内部这个函数可能看起来像

int MintermSum(int a, int b, int c, byte minterm)
{
    switch(minterm) {
         case 0:
             return 0;
         case 1:
             return (~a) & (~b) & (~c);
         case 2:
             return (~a) & (~b) & c;
         //.....
         case 0x12:
             return (a & (~b) & (~c)) | ((~a) & b & (~c));
         //..... lots of case's
         case 0xf0:
             return a;   // Simplified calculation
         //....
         case 0xff:
             return 1;
    }
}

我希望有人已经写过这个函数,但我找不到。请你帮忙好吗?

标签: c++mathbooleanlogicbit-manipulation

解决方案


谢谢朋友们,根据您的建议和链接,我自己实现了 minterm sum 函数,希望对其他人有用。

https://github.com/Epsiloncool/minterm-sum


推荐阅读