您如何仅比较数据类型中的某些位?

时间:2014-05-18 20:31:06

标签: c bit-manipulation

我正在尝试学习一些关于仿真的知识,我正在考虑如何解码操作码。每个操作码都是一种短数据类型,16位。我希望能够只比较特定的4位组。例如:有多个以00开头的操作码,例如0x00E0。

我希望能够以位或十六进制形式比较这些值中的每一个。我想的可能就是一些东西沿着一点点移动到其他所有东西的碰撞,这样我不关心的位就会消失。这可能会导致中心位问题,并需要额外的步骤。你们用什么样的解决方案来解决这个问题?

3 个答案:

答案 0 :(得分:3)

使用位掩码,其中设置了您关心的位。然后使用&运算符将您不关心的所有内容清零。例如,假设我们要比较ab中的最低四位:

uint16 mask = 0x000f;
if ((a & mask) == (b & mask)) {
  // lowest 4 bits are equal
}

答案 1 :(得分:1)

这很简单bit manipulation。您可以使用

屏蔽相关位
int x = opcode & 0x00f0;

并比较结果值

if (x == 0x00e0) {
    /* do something */
}

答案 2 :(得分:0)

你可以轻松创建" nbits"和转移" pos"位数和比较

uint32_t mask = ~((~0) << nbits);

if( (num(mask << pos)) == 0x00e0 ) {
    /* Do something */
}