Вопрос

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

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= Чтобы переопределить отдельно, вы полагаетесь на каждого исполнителя пользовательских типов, чтобы быть последовательным.

Это Assignment by bitwise OR

v1 |= v2;

коротко для:

v1 = v1 | v2;

cond ? x : y возвращается x Если кондицион верно и 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 в любом из входных номеров, то он будет 1 в результате.

Сравните с побитовыми и, которые находят «перекрытие» двух наборов битов:

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) или 1110 (14) = 1111 (15)

Оператор | = означает назначение побитовой или оператору

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top