У меня есть следующий код, и я не могу понять что означает:
var1 |= var2>0 ? 1 : 2;
Любой может помочь мне!
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
Побитовое-ИЛИ.
конд? x: y
возвращает x
, если cond истинно, и y
в противном случае. Прочтите Тернарный оператор
a | = b
- это сокращение для a = a | b
, который присваивает a | b
- a
a | b
- это побитовое ИЛИ для a
и b
. (например, 2 | 3 = 3 и 1 | 2 = 3)
Как уже говорили другие, это сокращение от v1 = v1 | v2;
Еще одно использование, с которым вы можете столкнуться, - это логические значения.
Дано:
bool b = /*some value*/
Вместо того, чтобы сказать:
if(a)
b = true;
, вы можете увидеть:
b |= a;
Оператор | = означает присвоение с помощью побитового оператора ИЛИ
Как говорили другие люди до меня, это означает, что в конечном итоге вы получите присваивание с помощью побитового ИЛИ.
Побитовое ИЛИ можно проиллюстрировать, взяв левую и правую части битовых шаблонов и поместив их друг над другом.
В каждом столбце: 0 + 0 дает 0, 1 + 0 дает 1, 0 + 1 дает 1, 1 + 1 дает 1.
В контексте логических значений: false OR false == ложь, истина ИЛИ ложь == истина, ложь ИЛИ истина == истина, истина ИЛИ истина == истина.
Вот пример поразрядного ИЛИ и результирующего битового шаблона: var1 (11) | = var2 (14) -> var1 (15)
1011 (11) OR 1110 (14) = 1111 (15)
Все операторы a op = b
являются сокращением для a = a op b
.
Однако, поскольку C ++ позволяет переопределить op
и op =
отдельно, вы полагаетесь на согласованность каждого разработчика настраиваемых типов.
Целые числа могут быть представлены в двоичном формате, так что каждая цифра (бит, переключатель) равна 1 (включен) или 0 (выключен) ):
00000000 == 0
00000001 == 1
00000010 == 2
00000011 == 3
00000100 == 4
00001000 == 8
00010000 == 16
Поразрядное ИЛИ объединяет два числа путем «слияния» двух наборов битов:
First number: 00110000
Second number: 00000010
Result: 00110010
Если бит равен 1 в ЛЮБОМ из входных чисел, то в результате он будет равен 1.
Сравните с побитовым И, который находит "перекрытие" двух s Количество битов:
First number: 00110100
Second number: 10011110
Result: 00010100
Если бит равен 1 в ОБЕИХ входных числах, то в результате он будет равен 1.
Если числа находятся в переменных a и b, вы можете поместить результаты поразрядного ИЛИ / И в новую переменную c:
unsigned int c = a | b; // OR
unsigned int c = a & b; // AND
Часто результат необходимо поместить в одну из двух переменных, например
unsigned int c = a | b; // OR
c = a; // copy
Таким образом, вы можете сделать это за один шаг:
a |= b; // merge b directly into a