【发布时间】:2019-12-07 08:52:56
【问题描述】:
例如,我有一个短(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;
【问题讨论】:
-
为什么不测试并找出答案?
-
这两个例子是我的,但我想问是否有更简单和更快的解决方案
-
你确定
var & 01010101 == 01010101,你不想var & 11111111 == 01010101吗? -
是的,因为如果我的 var 是 XXXXXXXX01010101,那么 (var & 0000000001010101) = 0000000001010101
-
在那种情况下无论如何都是一样的。如果
var = 11111111,你想发生什么?现在的代码会返回 1,但应该返回 1 吗?
标签: bit-manipulation bitwise-operators bit bit-shift bitwise-and