Вопрос:

Часто используемый символ "|" в Objective-C

objective-c

228 просмотра

4 ответа

197 Репутация автора

self.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleWidth;

Исходный код показан выше. Интересно, что символ "|" обозначает? Буду очень признателен за ваш ответ и спасибо за ответ;)

Автор: JackieLam Источник Размещён: 29.04.2013 08:34

Ответы (4)


12 плюса

17526 Репутация автора

Решение

Короче говоря: это побитовая операция ИЛИ .

Это обычно используется при создании битовых масок.

С помощью этой операции вы можете объединить флаги в двоичное число.

Например: возможные флаги для 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

Побитовое ИЛИ не следует путать с логическим ИЛИ, используемым с простой алгеброй истина / ложь.

Существует некоторая связь между ними (побитовая или может быть понята как логическая или между битами в одной и той же позиции), но это об этом.

Автор: Rok Jarc Размещён: 29.04.2013 08:36

4 плюса

1502 Репутация автора

| символ обозначает инклюзивную или побитовую операцию. который работает в предпосылке с сопоставлением цепочек битов двух объектов.

если у вас есть битовая строка 1101 и другая 1001, то включительно или из этих двух значений получится 1011. В основном, если текущий бит одинаков в обеих строках, то вместо него выводится 1, в противном случае - 0.

Автор: Nomad101 Размещён: 29.04.2013 08:36

10 плюса

37026 Репутация автора

| является побитовым оператором ИЛИ в C (и, следовательно, в Objective-C).

Смотрите http://en.m.wikipedia.org/wiki/Bitwise_operations_in_C

В контексте, о котором вы спрашивали, он используется для объединения двух значений флага.

Автор: Catfish_Man Размещён: 29.04.2013 08:37

2 плюса

1279 Репутация автора

Это побитовая операция ИЛИ, может быть, это может вам помочь: Побитовая операция

Автор: Tom Размещён: 29.04.2013 08:37
Вопросы из категории :
32x32