位运算 - 如何检查一个二进制数是否包含另一个?

10
  A  = 110000000    -    384 Blue+Red
  B  = 011000010    -    194 Green+Black+Red

  A & B =   C  = 010000000    -    128 Red

我该如何检查B是否包含A中的所有位和其他一些位?在上面的情况下,我希望得到“false”。

我正在使用XCode和Objective-C,但据我所知,这不应该有影响。


你的示例中不清楚颜色指的是什么。我猜你的问题是:“如何检查数字A中所有位都设置为1,是否也在数字B中设置为1?” - franssu
@franssu编辑了答案。 - Segev
3个回答

17

如果A&B(即交集)等于A,则B包含A:

(a & b) == a

这类似于

a ⊆ b ↔ (a ∩ b) = a

来自集合论。


a ⊆ b ↔ (a ∩ b) = a 让我回忆起了几年前,谢谢! - Segev

1

如果你的意思是完全相同的位,测试为A == B

如果你的意思是B必须具有在A中设置的所有位,以及其他一些位,(A & B) == A


当然你的测试不会打印任何东西:因为你的B值并不包含你的A值的所有位,所以你得到了你想要的false - Mike Seymour

0

使用 ex-nor

 In C ^ is ex-or operator and ~ is complement, to get ex-nor use ~(a^b)

如果a和b相同,则在~(a^b)中所有位都将为1。

或者等价地说,a == b。我认为混淆并没有增加任何东西。 - Mike Seymour
当然可以。要执行位运算操作,您可以使用上述方法。 - Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接