Что делает “| =” операция, средняя в C++?

У меня есть следующий код, и я не могу понять что означает:

var1 |= var2>0 ? 1 : 2;

Любой может помочь мне!

12
задан polygenelubricants 9 May 2010 в 07:07
поделиться

8 ответов

if (var2 > 0)
  var1 = var1 | 1;
else 
  var1 = var1 | 2;

Побитовое-ИЛИ.

21
ответ дан 2 December 2019 в 02:59
поделиться

конд? x: y возвращает x , если cond истинно, и y в противном случае. Прочтите Тернарный оператор

a | = b - это сокращение для a = a | b , который присваивает a | b - a

a | b - это побитовое ИЛИ для a и b . (например, 2 | 3 = 3 и 1 | 2 = 3)

6
ответ дан 2 December 2019 в 02:59
поделиться

Как уже говорили другие, это сокращение от v1 = v1 | v2; Еще одно использование, с которым вы можете столкнуться, - это логические значения.
Дано:

bool b = /*some value*/

Вместо того, чтобы сказать:

if(a)
  b = true;

, вы можете увидеть:

  b |= a;
4
ответ дан 2 December 2019 в 02:59
поделиться

Оператор | = означает присвоение с помощью побитового оператора ИЛИ

2
ответ дан 2 December 2019 в 02:59
поделиться

Как говорили другие люди до меня, это означает, что в конечном итоге вы получите присваивание с помощью побитового ИЛИ.

Побитовое ИЛИ можно проиллюстрировать, взяв левую и правую части битовых шаблонов и поместив их друг над другом.

В каждом столбце: 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)
3
ответ дан 2 December 2019 в 02:59
поделиться

Все операторы a op = b являются сокращением для a = a op b .

Однако, поскольку C ++ позволяет переопределить op и op = отдельно, вы полагаетесь на согласованность каждого разработчика настраиваемых типов.

12
ответ дан 2 December 2019 в 02:59
поделиться

Его Присваивание поразрядным ИЛИ

v1 |= v2;

является сокращением от:

v1 = v1 | v2;
7
ответ дан 2 December 2019 в 02:59
поделиться

Целые числа могут быть представлены в двоичном формате, так что каждая цифра (бит, переключатель) равна 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
4
ответ дан 2 December 2019 в 02:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: