我试图开发一种算法来测试二进制数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
这有意义吗?
谢谢!
答案 0 :(得分:2)
A
是B
的子编号,如果按位,A
和B
之间等于A
。
示例:1000 & 1110 = 1000
,1010 & 1110 = 1010
,101 & 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中的下一位,直到找到不匹配,或者你的位用完为止。