-1

我有 3 个位图数组,我想根据以下条件计算一个布尔结果:

1) Neighboring even and odd index bits are a pair (the pair relationship will be provided by a bitmap). For example: pair0 = (bit1, bit0); pair1 = (bit3, bit2); etc.

2) For a given bit, if its pair has been already set to 0, then return false; else, return true.

例如:

Bit index ----------->  3 2 1 0
______________________________________________________________
1) Bitmap#1: 1 1 1 1   1 ? 1 1   (here, "?" could be 0 or 1)
2) Bitmap#2: 0 0 0 0   1 1 0 0
3) Bitmap#3: 0 0 0 0   1 0 0 0

在本例中,bit3 和 bit2 是一对(参见 Bitmap#2)。假设 bit3 为 1(参见 Bitmap#3),则:

1) If bit #2 (the "?") in Bitmap#1 is 0, then return false;
2) If bit #2 (the "?") in Bitmap#1 is 1, then return true;

如何使用位运算来计算结果?

谢谢!

4

1 回答 1

0

此伪代码显示了如何测试 2 位对的任何结果。您可以在 8 位位图中使用对 0..3;

unsigned char mask = 0x3;  // 00000011 -> mask for two bits
unsigned int pair=1;       // pair with bit #2 and #3
unsigned char result = (bitmap & (mask<<(pair*2)) // shift the mask pair * 2 bits to left (00001100)
result >>= (pair*2);         // shift result back pair * 2 bits

if(result == 0x3) return both;       // bit #3 and #2 are 1
if(result == 0x2) return onlyleft;   // bit #3 is 1 #2 is 0
if(result == 0x1) return onlyright;  // bit #3 is 0 #2 is 1
if(result == 0x0) return none;       // bit #3 and #2 are 0
于 2017-10-25T07:43:12.013 回答