Java 什么是|=&引用;C+中的操作平均值+;?

Java 什么是|=&引用;C+中的操作平均值+;?,java,c++,operators,ternary-operator,compound-assignment,Java,C++,Operators,Ternary Operator,Compound Assignment,我有以下代码,我无法理解它的含义: var1 |= var2>0 ? 1 : 2; 任何人都可以帮我 缩写为: v1 = v1 | v2; 它是按位或。所有a op=b运算符都是a=a op b的快捷方式 P>但是,由于C++允许代码> OP> /COD>和 OP= 单独重置,所以每个自定义类型的实现者都是一致的。 < P>操作符= =按位或运算符赋值< /P> < P>。代码> 你可能会遇到的另一个用法是布尔语。 鉴于: 而不是说: if(a) b = true; 你可能会

我有以下代码,我无法理解它的含义:

var1 |= var2>0 ? 1 : 2;
任何人都可以帮我

缩写为:

v1 = v1 | v2;

它是按位或。

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


<> P>但是,由于C++允许<>代码> OP> /COD>和 OP= 单独重置,所以每个自定义类型的实现者都是一致的。

< P>操作符= =按位或运算符赋值< /P> < P>。代码> 你可能会遇到的另一个用法是布尔语。
鉴于:

而不是说:

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

  b |= a;

cond?如果cond为true,则x:y
返回
x
,否则返回
y
。阅读

a |=b
a=a | b
的缩写,它将
a | b
赋值给
a


a | b
属于
a
b
。(例如,2 | 3=3和1 | 2=3)

正如我之前的其他人所提到的,这意味着您将以按位或的方式结束作业

按位或可以通过取左侧和右侧位模式并将它们彼此重叠来说明

在每列中:0+0表示0,1+0表示1,0+1表示1,1+1表示1。
在布尔值的上下文中:false或false==false,true或false==true,false或true==true,true或true==true

以下是按位OR的示例以及生成的位模式: var1(11)|=var2(14)->var1(15)

1011 (11) 或1110(14) = 1111 (15)
整数可以用二进制表示,因此每个数字(位、开关)为1(开)或0(关):

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

First number:     00110000
Second number:    00000010
Result:           00110010
First number:     00110100
Second number:    10011110
Result:           00010100
如果某位在任一输入数字中为1,则结果中为1

与按位AND比较,发现两组位的“重叠”:

First number:     00110000
Second number:    00000010
Result:           00110010
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

在CS中,它被称为“复合赋值”。你应该仔细阅读该语言。仅供参考,这在Java中也是可行的,例如,
int var1,var2
。它被称为“某人太聪明,创建了不可读的代码,而不是创建易于阅读和维护的干净的逻辑结构代码”。Polygene的答案是完美的,因为它可以立即理解。我认为在
@
@=
中执行不同任务的任何人都是邪恶的:s@MatthieuC++是(和,IMO,总是)这是一种语言,它给了你足够的束缚,你可以用它来吊死自己。我不知道有谁实现它们会有不同的行为(除了复合赋值明显改变了它的左操作数)。但是实现一个而不实现另一个是相当常见的,例如iostreams插入操作符。但是愚蠢到把绳子系在自己脖子上需要付出努力。
a!=b
a=a不一样!b
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