算法帮助:计算二进制可能性,同时忽略零位

时间:2014-04-03 12:49:48

标签: algorithm binary

我试图开发一种算法来测试二进制数A是否为"子数"二进制数B。

A是B的子编号,如果只能使用" 1"来自B的位。

例如:

如果B =十进制5 =二进制101 然后A = {100,001,101},因为它们只使用在B中有效的位。

如果B =十进制8 =二进制1000 然后A = {1000}

如果B =十进制7 =二进制1110 然后A = {1000,0100,0010,1100,0110,1010,1110}

n(A)=(2 ^(有效位数)) - 1

如何开发一个十进制数x是否在十进制数B的集合A中的测试?例如。 IsSubNumber(A,B)

IsSubNumber(1,7)= true IsSubNumber(2,8)= false

这有意义吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

AB的子编号,如果按位,AB之间等于A

示例:1000 & 1110 = 10001010 & 1110 = 1010101 & 101 = 101 ...

在java中:

boolean isSubNumber(int a, int b) {
    return (a&b) == a;
}

答案 1 :(得分:1)

简单地说,如果A中的位i是1,那么它也必须是B中的1。所以简单地循环A,如果当前位是1,那么检查B中的相应位,如果它不是1 ,然后输出false,否则继续测试A中的下一位,直到找到不匹配,或者你的位用完为止。