У меня есть следующий код, и я не понимаю, что это значит:
var1 |= var2>0 ? 1 : 2;
Любой может мне помочь!
У меня есть следующий код, и я не понимаю, что это значит:
var1 |= var2>0 ? 1 : 2;
Любой может мне помочь!
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
Побитовое или.
Все операторы a op= b
являются ярлыками для a = a op b
.
Однако, поскольку С++ разрешает переопределять op
и op=
, вы полагаетесь на каждый из исполнителей пользовательских типов, чтобы быть последовательными.
v1 |= v2;
сокращается для:
v1 = v1 | v2;
cond ? x : y
возвращает x
, если cond is true и 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;
Целые числа могут быть представлены в двоичном формате, так что каждая цифра (бит, переключатель) равна 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 в BOTH входных чисел, тогда в результате будет 1.
Если числа находятся в переменных a и b, вы можете поместить побитовые результаты OR/AND в новую переменную 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
Как упомянули другие люди, передо мной, это означает, что вы закончите присваивание поразным OR.
Побитовое ИЛИ можно проиллюстрировать, взяв левые и правые боковые диаграммы и поместив их поверх каждого другого.
В каждом столбце: 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)
Оператор | = означает присваивание побитовым оператором OR