给定一个包含输入位和输出位的真值表,很容易找到将输入位组合成单个输出位的 bool 表达式?
我的问题是,派生的 bool 表达式分别对每个位进行操作。
我正在寻找相同的过程,但使用编程语言中使用的按位运算符,这些运算符并行操作所有输入位以并行导出输出位。
示例问题:
- 输入: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);
}