12

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

var1 |= var2>0 ? 1 : 2;

任何人都可以帮助我!

4

8 回答 8

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

它是按位或。

于 2010-04-17T08:51:50.887 回答
12

所有a op= b运算符都是a = a op b.

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

于 2010-04-17T08:53:14.567 回答
7

它的Assignment by bitwise OR

v1 |= v2;

简称:

v1 = v1 | v2;
于 2010-04-17T08:51:37.613 回答
6

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

a |= ba = a | b是分配a | b给的简写a

a | b是和的按位或。(例如 2 | 3 = 3 和 1 | 2 = 3 )ab

于 2010-04-17T08:57:17.923 回答
4

整数可以用二进制表示,因此每个数字(位、开关)为 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 中,您可以将按位 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
于 2010-04-17T09:32:13.523 回答
4

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

bool b = /*some value*/

而不是说:

if(a)
  b = true;

你可能会看到:

  b |= a;
于 2010-04-17T08:57:05.947 回答
3

正如我之前的其他人所提到的,这意味着您最终会得到按位或的分配。

按位或可以通过将左侧和右侧位模式放在一起来说明。

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

下面是一个按位或的示例和生成的位模式: var1(11) |= var2(14) --> var1(15)

    1011 (11)
或 1110 (14)  
= 1111 (15)
于 2010-04-17T09:30:18.627 回答
2

运算符 |= 表示按位或运算符赋值

于 2010-04-17T08:54:00.510 回答