例如,我有一个短(2个字节= 16位)变量:(在我的项目中,这是00、01和10的序列)
0001010101101001 = 0001.0101|0110.1001
并且我想检查此变量是否包含位序列,例如,我需要'01010101'(这是4 x 01)。
最快的检查方法是什么?我找到了一些解决方案,但我确信存在更简单,更快速的解决方案。
(pseudocode)
var = 0001010101101001;
need = 0000000001010101;
for(int i=0;i<4;i++)
{
if(var&need==need)
return 1;
else
var = var >> 2;
}
或:
(pseudocode)
var = 0001010101101001;
need1 = 0000000001010101;
need2 = 0000000101010100;
need3 = 0000010101010000;
need4 = 0001010101000000;
need5 = 0101010100000000;
if(var&need1==need1) return 1;
if(var&need2==need2) return 1;
if(var&need3==need3) return 1;
if(var&need4==need4) return 1;
if(var&need5==need5) return 1;
else return 0;
还有另一种方式: