经常使用的符号“|”在Objective-C中

时间:2013-04-29 08:34:21

标签: objective-c

self.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleWidth;

源代码如上所示。 想知道什么符号“|”代表? 非常感谢您的回答并感谢您的回复;)

4 个答案:

答案 0 :(得分:12)

简而言之:这是bitwise OR操作。

它通常用于生成位掩码。

通过此操作,您可以将标记组合成二进制数。

例如:UIViewAutoresizing的可能标志是:

enum {
   UIViewAutoresizingNone                 = 0,           // = 0b 0000 0000 =  0
   UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,      // = 0b 0000 0001 =  1
   UIViewAutoresizingFlexibleWidth        = 1 << 1,      // = 0b 0000 0010 =  2
   UIViewAutoresizingFlexibleRightMargin  = 1 << 2,      // = 0b 0000 0100 =  4
   UIViewAutoresizingFlexibleTopMargin    = 1 << 3,      // = 0b 0000 1000 =  8
   UIViewAutoresizingFlexibleHeight       = 1 << 4,      // = 0b 0001 0000 = 16
   UIViewAutoresizingFlexibleBottomMargin = 1 << 5       // = 0b 0010 0000 = 32
};
typedef NSUInteger UIViewAutoresizing;

说明:

self.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleWidth;

与以下内容基本相同:

self.autoresizingMask = UIViewAutoresizingFlexibleWidth;

(因为两个操作数是相同的)。

如果您要问:

self.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

这会将self.autoresizingMask设置为:

(1<<1)|(1<<4)=(0b 0000 0010)|(0b 0001 0000)=0b 0001 0010 = 9

使用简单真/假代数的Logical OR不会混淆按位OR。

两者之间存在某种关系(按位或可以理解为逻辑或位于同一位置的位之间),但这就是它。

答案 1 :(得分:10)

|是C中的按位OR运算符(因此在Objective-C中)。

请参阅http://en.m.wikipedia.org/wiki/Bitwise_operations_in_C

在您询问的上下文中,它被用于组合两个标志值。

答案 2 :(得分:4)

| character表示包含或按位操作。它在匹配两个对象的位串的前提下运行。

如果你有一个位串1101而另一个1001包含两个或两个会产生1011.基本上如果两个字符串中的当前位相同,则输出1,否则为0。

答案 3 :(得分:2)

这是一个按位OR运算,也许这可以帮助你:Bitwise operation