我正在尝试学习一些关于仿真的知识,我正在考虑如何解码操作码。每个操作码都是一种短数据类型,16位。我希望能够只比较特定的4位组。例如:有多个以00开头的操作码,例如0x00E0。
我希望能够以位或十六进制形式比较这些值中的每一个。我想的可能就是一些东西沿着一点点移动到其他所有东西的碰撞,这样我不关心的位就会消失。这可能会导致中心位问题,并需要额外的步骤。你们用什么样的解决方案来解决这个问题?
答案 0 :(得分:3)
使用位掩码,其中设置了您关心的位。然后使用&
运算符将您不关心的所有内容清零。例如,假设我们要比较a
和b
中的最低四位:
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 */
}