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>和
鉴于: 而不是说:
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