У меня есть следующий код, и я не могу понять, что это значит:Что означает «| =» в C++?
var1 |= var2>0 ? 1 : 2;
Любой человек может помочь мне, пожалуйста!
У меня есть следующий код, и я не могу понять, что это значит:Что означает «| =» в C++?
var1 |= var2>0 ? 1 : 2;
Любой человек может помочь мне, пожалуйста!
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
Это побитовое или.
Все операторы a op= b
являются ярлыками от a = a op b
.
Однако, поскольку C++ разрешает переопределять op
и op=
, вы полагаетесь на то, что каждый разработчик настраиваемых типов будет согласован.
Я бы назвал зло любого, выполняющего разные задачи в '@' и '@ =': s –
@Matthieu: C++ - это (и, ИМО, всегда будет) язык, который дает вам много веревки, с помощью которых можно повесить себя. – Richard
Я не знаю никого, кто их применял, чтобы иметь другое поведение (за исключением того, что составное назначение, очевидно, изменяет его левый операнд). Но реализация одного без другого довольно распространена, например. операторы ввода iostreams. –
Оператор | = означает присвоение с помощью побитового ИЛИ оператора
Как уже сказал, что это сокращение v1 = v1 | v2;
Другого использования вы можете встретить это с булевыми.
Дано:
bool b = /*some value*/
Вместо того чтобы сказать:
if(a)
b = true;
вы можете увидеть:
b |= a;
cond ? x : y
возвращается x
если конд верно и y
иначе. Читать Ternary Operator
a |= b
представляет собой сокращенную a = a | b
который назначая a | b
к a
a | b
является bitwise OR из a
и b
. (например, 2 | 3 = 3 и 1 | 2 = 3)
2 | 3 = 3, правильно? – Cowan
@Cowan: спасибо и обновлены. –
Как и другие люди, которые передо мной упоминали, это означает, что вы получите назначение поразрядным ИЛИ.
Побитовое ИЛИ может быть проиллюстрировано с помощью левого и правого боковых узоров и поместить их поверх каждого другого.
В каждой колонке: 0 + 0 дает 0, 1 + 0 дает 1, 0 + 1 дает 1, 1 + 1 дает 1.
В контексте булевы: ложные или ложно == ложным, истинным или ложным == true, false ИЛИ true == true, true ИЛИ true == true.
Вот пример побитового OR и полученный битовый шаблон: var1 (11) | = var2 (14) -> var1 (15)
1011 (11) OR 1110 (14) = 1111 (15)
Целые может быть представлено в двоичной системе, так что каждая цифра (бит, переключатель) равен 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 в EITHER номеров ввода, то в результате это будет 1.
Сравнение с побитового И, который находит «перекрывание» из двух наборов битов:
First number: 00110100
Second number: 10011110
Result: 00010100
Если бит равен 1 в обоих входных чисел, то он будет 1 в результате.
Если числа в переменных а и Ь, вы можете поместить побитовый ИЛИ/И результаты в новый переменный с:
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
в CS, это называется «ком фунт ". –
Вы должны прочитать на этом языке. – starblue
FYI, это также выполнимо в Java, например, 'int var1, var2'. – polygenelubricants