Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Поразрядная операция ИЛИ Objective-C

0

Два байта можно объединить поразрядной операцией ИЛИ; результат представляет собой третий байт. Бит третьего байта содержит 1 в том случае, если хотя бы один из двух соответствующих битов первых двух байтов равен 1.

Поразрядная операция ИЛИ выполняется оператором 1. Для экспериментов с

отдельными  битам  создайте  новый  проект:  программу  командной  строки  С  (не

Foundation!) с именем bitwize.

Отредактируйте файл main.c:

#include <stdio.h>

int main (int argc, const char * argv[])

{

unsigned char a = 0x3c; unsigned char b = 0xa9; unsigned char c = a | b;

printf("Hex: %x | %x = %x\n", a, b, c); printf("Decimal: %d | %d = %d\n", a, b, c);

return 0; }

Рис. 33.3. Объединение двух байтов поразрядной операцией ИЛИ

ИЛИ:

Программа выдает результат объединения двух байтов поразрядной операцией

Hex: 3c | a9 = bd Decimal: 60 | 169 = 189

Зачем это нужно? В Objective-C целые числа часто используются для определения настроек. Целое число всегда представляет собой последовательность битов, и каждый бит представляет один аспект общей настройки, который может включаться/выключаться независимо от других. Это целое число (также называемое битовой маской) строится  из констант, входящих в  заранее определенный набор. Константы также являются целыми числами, и каждая константа задает один аспект настройки, то есть устанавливает только один бит в общем значении. Итоговое значение образуется посредством объединения констант, представляющих нужные аспекты, поразрядной операцией ИЛИ.

Рассмотрим конкретный пример. В iOS входит класс с именем NSDataDetector. Экземпляры NSDataDetector ищут в тексте вхождения стандартных обозначений – таких, как даты или URL-aдpeca. Искомые обозначения определяются объединением целочисленных констант из фиксированного набора поразрядной операцией ИЛИ.

В файле NSDataDetector.h определяются следующие константы: NSTextCheckingTypeDate, NSTextCheckingTypeAddress, NSTextCheckingTypeLink, NSTextCheckingTypePhoneNumber, и NSTextCheckingTypeTransitInformation. При создании экземпляра NSDataDetector вы указываете, что именно он должен искать.

Например,   чтобы   экземпляр   искал   в   тексте   телефонные   номера   и   даты,   вы определяете его следующим образом:

NSError *e;

NSDataDetector *d = [NSDataDetector dataDetectorWithTypes:

NSTextCheckingTypePhoneNumber|NSTextCheckingTypeDate error:&e];

Обратите внимание на оператор поразрядной операции или. Этот прием очень часто встречается в программировании Сосоа и iOS; теперь вы знаете, что при этом происходит «за кулисами».

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии