c++ - 真值表到位表达式

标签 c++ c bitwise-operators

<分区>

给定一个包含输入位和输出位的真值表,很容易找到将输入位组合成单个输出位的 bool 表达式?

我的问题是,派生的 bool 表达式分别对每个位进行操作。

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

示例问题:

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

有没有办法:

  1. 推导出一个公式/算法,对输入整数进行按位运算以复制“部分真值表”?
  2. 尽量减少导出公式/算法的复杂性?

最佳答案

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

首先定义一些位掩码:

#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/

相关文章:

c++ - 使用goto语句时,代码不会在循环内的期望位置输出

c++ - 导入 cstring 失败 : include <cstring> error

c - 写入 C 中给定的 void* 内存位置

C++ uint64_t 按位与检查偶数

c++ - C++ 中的按位数学运算

c++ - 错误 LNK2019 错误 C++

c++ - 在多项目 Visual Studio 解决方案中以不同配置编译项目

c - C语言中的短路评估是什么?

c - 数据结构如何在堆上组织

R 将 2 个字节的原始数据转换为整数