我想测试一个正整数,以查看其二进制表示形式是否以零或多个1开头,然后是一个或多个0开头.
00000000 // Valid
10000000 // Valid
11000000 // Valid
11100000 // Valid
11110000 // Valid
11111100 // Valid
11111110 // Valid
11111110 // Valid
11111111 // Not Valid
// Any other combination is Not Valid
用正则表达式表示的是^ [1] * [0] $.当然,这只是为了澄清,我们不能使用正则表达式.
蛮力逼近:
>创建多个位掩码,然后将AND一起确定结果.
>使用动态掩码遍历每个数字以确定结果.
问题是我正在处理可能有成千上万个数字的巨大正整数,并且需要对成千上万个这样的数字执行此测试.
有没有更有效的方法来确定这种二进制模式?
更新
这是我尝试过的实现.尚未将时间与其他答案进行比较.
public static bool IsDiagonalToPowerOfTwo (this System.Numerics.BigInteger number)
{
byte [] bytes = null;
bool moreOnesPossible = true;
if (number == 0) // 00000000
{
return (true); // All bits are zero.
}
else
{