知道这个函数返回什么吗?我不知道为什么它在第二行
上移动了1
感谢bool findWhat(U32 bitmask)
{
U32 bitmaskOdd = bitmask & 0x55555555;
U32 bitmaskEven = (bitmask & 0xAAAAAAAA) >> 1;
U32 bitmaskXor = bitmaskOdd ^ bitmaskEven;
if (bitmaskXor & bitmaskEven)
{
return TRUE;
}
return FALSE;
}
以一个位掩码为例,其中包含相邻位在奇数和偶数位置上的所有四种可能的变体:
8 7 6 5 4 3 2 1 Position (counted 1-based)
0 0 0 1 1 0 1 1 bitmask
生成bitmaskOdd:
0 0 0 1 0 0 0 1 bits in odd positions are kept
resultbitmaskEvenwithout shift:
0 0 0 0 1 0 1 0 bits in even positions are kept
resultbitmaskEvenwith shift:
0 0 0 0 0 1 0 1 bits in even positions are kept but shifted
bitmaskXor作为bitmaskEven和bitmaskOdd的位XOR
:
0 0 0 1 0 1 0 0
位AND
bitmaskXor和bitmaskEven:
0 0 0 0 0 1 0 0
由于AND
不为零,函数返回true
。这表示在偶数位和奇数位上存在一个相邻的位对,其中偶数位被设置,而奇数位没有被设置。
换句话说:函数返回true
,如果至少有一个10
对相邻的位,其中右边的位是奇数位。