我有以下的代码,我不明白这是什么意思:

var1 |= var2>0 ? 1 : 2;

任何人都可以帮我请!

有帮助吗?

解决方案

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

它的按位或

其他提示

所有a op= b运营商的捷径a = a op b

然而,由于C ++允许opop=被覆盖单独你依靠自定义类型的每个实施者要一致。

它的 Assignment by bitwise OR

v1 |= v2;

是短期的:

v1 = v1 | v2;

cond ? x : y返回x如果cond为真和y否则。读三元运算符

a |= b是简写a = a | b其被分配到a | b a

a | b按位或ab。 (例如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的结果。

与按位比较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

由于我之前的其他人都提到,这意味着你将与按位或工作分配结束。

位或可以通过取左手和右手侧的位图案,并把它们的上顶部海誓山盟所示。

在每一列:0 + 0 0给出,1 + 0给出1,0 + 1给出了1,1 + 1给出1.结果 在布尔值的上下文中:假或假== FALSE,TRUE或FALSE ==真,假或真== TRUE,真或真== TRUE

下面是按位或将所得的位模式的一个示例: VAR1(11)| = VAR2(14) - > VAR1(15)

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

操作员| =手段由位OR运算符分配

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top