Оператор <<
есть Побитовый Оператор сменной или сменной. Сдвиг всех битов влево на заданное количество раз: (арифметический сдвиг влево и резервы знаковый бит)
m << n
Сдвиг всех битов m
налево в n
число раз.(извещение одна смена == умножить на два).
1 << 0
означает нет сдвиг так, чтобы он равнялся 1
.
1 << 1
означает один сдвиг так, что он равен 1*2
= 2.
Я объясняю один байт: один в один байт, как:
MSB
+----+----+----+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1
+----+----+----+---+---+---+---+---+
7 6 5 4 3 2 1/0
| / 1 << 1
| |
▼ ▼
+----+----+----+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2
+----+----+----+---+---+---+---+---+
7 6 5 4 3 2 1 0
В то время как 1 << 0
не делать ничего, кроме как его фигура одного. (Уведомление седьмой бит копируется сохранить знак)
оператор ИЛИ: сделать немного мудрым или
MSB PKRevealControllerTypeLeft
+----+----+----+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | == 1
+----+----+----+---+---+---+---+---+
7 6 5 4 3 2 1 0
| | | | | | | | OR
MSB PKRevealControllerTypeRight
+----+----+----+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | == 2
+----+----+----+---+---+---+---+---+
7 6 5 4 3 2 1 0
=
MSB PKRevealControllerTypeBoth
+----+----+----+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | == 3
+----+----+----+---+---+---+---+---+
7 6 5 4 3 2 1 0
|
является немного мудрый оператор. ниже в коде or
1 | 2
== 3
PKRevealControllerTypeNone = 0, // is Zero
PKRevealControllerTypeLeft = 1 << 0, // one
PKRevealControllerTypeRight = 1 << 1, // two
PKRevealControllerTypeBoth = (PKRevealControllerTypeLeft |
PKRevealControllerTypeRight) // three
Существует не более техническая причина инициализируются значениями, как это, определяя, как это делает вещи выстраиваться красиво этот ответ: define SOMETHING (1 << 0)
оптимизации компилятор преобразует их в проще, как: (Я не уверен, что для третьего, но я думаю, что компилятор оптимизирует это слишком)
PKRevealControllerTypeNone = 0, // is Zero
PKRevealControllerTypeLeft = 1, // one
PKRevealControllerTypeRight = 2, // two
PKRevealControllerTypeBoth = 3, // Three
Редактировать: @thanks to Till. этот ответ App States with BOOL flags показывает полезность объявлений, которые вы получили с помощью бит-мудрых операторов.
Похоже Objective C, а не C++ – jedwards
На каком языке? Нет такого языка, как C/C++, и это похоже на другой язык. А как насчет этого макроса? Что такое 'NS_OPTIONS'? –
забыть об этом. Я хотел бы знать, какие значения будут иметь значения из всех трех других значений. Что 1 << 0, 1 << 1, а третий будет производиться? – SpaceDog