“| =”操作在C ++中意味着什么?

时间:2010-04-17 08:50:01

标签: java c++ operators ternary-operator compound-assignment

我有以下代码,我无法理解它是什么意思:

var1 |= var2>0 ? 1 : 2;

任何人都可以帮助我!

8 个答案:

答案 0 :(得分:21)

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

这是按位 - 或。

答案 1 :(得分:12)

所有a op= b运算符都是a = a op b的快捷方式。

但是,由于C ++允许单独覆盖opop=,因此您依赖自定义类型的每个实现者保持一致。

答案 2 :(得分:7)

它是Assignment by bitwise OR

v1 |= v2;

简称:

v1 = v1 | v2;

答案 3 :(得分:6)

如果cond为true,则

cond ? x : y会返回x,否则会返回y。阅读Ternary Operator

a |= ba = a | b的简写,它将a | b分配给a

a | bab的{​​{3}}。 (例如2 | 3 = 3和1 | 2 = 3)

答案 4 :(得分:4)

正如其他人所说,它是v1 = v1 | v2;的缩写 您可能遇到的另一种用法是布尔值 鉴于:

bool b = /*some value*/

而不是说:

if(a)
  b = true;
你可能会看到:

  b |= a;

答案 5 :(得分:4)

整数可以用二进制表示,因此每个数字(位,开关)是1(开)或0(关):

00000000  ==  0
00000001  ==  1
00000010  ==  2
00000011  ==  3
00000100  ==  4
00001000  ==  8
00010000  ==  16

按位OR通过“合并”两组位来组合两个数字:

First number:     00110000
Second number:    00000010
Result:           00110010

如果输入数字的位数为1,则结果中的位数为1.

与按位AND比较,它找到两组位的“重叠”:

First number:     00110100
Second number:    10011110
Result:           00010100

如果输入数字的位数为1,则结果中的数字为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

答案 6 :(得分:3)

正如我之前提到的其他人一样,这意味着你最终会按位OR进行作业。

可以通过左手和右手的位模式来说明按位OR,并将它们放在彼此的顶部。

在每列中:0 + 0给出0,1 + 0给出1,0 + 1给出1,1 + 1给出1.
在布尔值的上下文中:false OR false == false,true或false == true,false OR true == true,true或true == true。

以下是按位OR和结果位模式的示例: var1(11)| = var2(14) - > VAR1(15)

    1011 (11)
OR  1110 (14)  
=   1111 (15)

答案 7 :(得分:2)

运算符| =表示按位OR运算符分配