Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        3年前关闭。
                                                                                            
                
        
给定具有输入位和输出位的真值表,是否容易找到将输入位组合为单个输出位的布尔表达式?

我的问题是,派生的布尔表达式对每个位分别进行运算。

我正在寻找相同的过程,但使用的是编程语言中使用的按位运算符,该运算符对所有输入位并行进行操作以并行导出输出位。

问题示例:


输入:8位整数,其中只有一些输入位相关,例如位2和5。其他状态与输出无关。
输出:8位整数,具有两个相关的输出位,取决于两个相关的输入位的状态,例如位3和6。所有其他位应统一设置为1或0。


有没有办法:


推导对输入整数进行按位运算的公式/算法,以复制“部分真值表”?
最小化派生公式/算法的复杂性?

最佳答案

好吧,我会做这样的事情:

首先定义一些位掩码:

#define BITMASK0 (1<<0)
#define BITMASK1 (1<<1)
#define BITMASK2 (1<<2)
#define BITMASK3 (1<<3)
#define BITMASK4 (1<<4)


然后,我将定义如何隔离输入位:

#define INBIT0(x) (BITMASK0&(x))>>0
#define INBIT1(x) (BITMASK1&(x))>>1
#define INBIT2(x) (BITMASK2&(x))>>2
#define INBIT3(x) (BITMASK3&(x))>>3
#define INBIT4(x) (BITMASK4&(x))>>4


以及如何将输出位放置在正确的输出位置

#define OUTBIT0(x) ((x)<<0) & BITMASK0
#define OUTBIT1(x) ((x)<<1) & BITMASK1
#define OUTBIT2(x) ((x)<<2) & BITMASK2
#define OUTBIT3(x) ((x)<<3) & BITMASK3
#define OUTBIT4(x) ((x)<<4) & BITMASK4


现在,在代码中,我将根据您的逻辑描述如何操作它

int main()
{
    unsigned char a; // choose your initialization here
    unsigned char b = 0;

    b = OUTBIT0(1) | OUTBIT1(INBIT5(a) & INBIT3(a)) | OUTBIT2(0);
}

关于c++ - 真值表按位表达,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35699947/

10-13 08:25