Что означает операция "| = " в C++?
У меня есть следующий код, и я не могу понять, что это значит:
var1 |= var2>0 ? 1 : 2;
кто может помочь мне, пожалуйста!
8 ответов
все a op= b
операторы ярлык a = a op b
.
однако, поскольку C++ позволяет op
и op=
чтобы быть переопределенным отдельно, вы полагаетесь на согласованность каждого реализатора пользовательских типов.
cond ? x : y
возвращает x
если cond истинно и y
иначе. Читать Тернарный Оператор
a |= b
- это сокращение для a = a | b
что назначение a | b
to a
a | b
is побитовое или of a
и b
. ( например, 2 | 3 = 3 и 1 | 2 = 3 )
как говорили другие, это сокращение от v1 = v1 | v2;
Другое использование, с которым вы можете столкнуться, - это booleans.
Дано:
bool b = /*some value*/
вместо того чтобы сказать:
if(a)
b = true;
вы можете увидеть:
b |= a;
целые числа могут быть представлены в двоичном формате, так что каждая цифра (бит, переключатель) равна 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 в результате.
сравните с побитовым AND, который находит "перекрытие" двух наборов битов:
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
Как упоминали другие люди до меня, это означает, что вы закончите с заданиями побитовым или.
побитовое или можно проиллюстрировать, взяв битовые шаблоны левой и правой стороны и положив их поверх друг друга.
в каждом столбце: 0 + 0 дает 0, 1 + 0 дает 1, 0 + 1 дает 1, 1 + 1 дает 1.
В контексте логических значений: false или false = = false, true или false == true, false или true == true, true или true == true.
вот пример побитового или и результирующего битового шаблона: var1 (11) / = var2(14) -- > var1(15)
1011 (11) OR 1110 (14) = 1111 (15)