“|=”操作在C++中是啥意思?
Posted
技术标签:
【中文标题】“|=”操作在C++中是啥意思?【英文标题】:What does "|=" operation mean in C++?“|=”操作在C++中是什么意思? 【发布时间】:2011-02-09 02:41:25 【问题描述】:我有以下代码,但我不明白这是什么意思:
var1 |= var2>0 ? 1 : 2;
任何人都可以帮助我!
【问题讨论】:
在 CS 中,它被称为“复合赋值”。 您应该阅读该语言。 仅供参考,这在给定的 Java 中也是可行的,例如int var1, var2
.
这被称为“某人太聪明了,创建了不可读的代码,而不是创建了易于阅读和维护的干净的逻辑结构代码”。 polygenelubricants 的答案是完美的,因为它可以立即理解。
【参考方案1】:
cond ? x : y
如果 cond 为真,则返回 x
,否则返回 y
。阅读Ternary Operator
a |= b
是a = a | b
的简写,将a | b
分配给a
a | b
是a
和b
中的bitwise OR。 (例如 2 | 3 = 3 和 1 | 2 = 3)
【讨论】:
【参考方案2】:整数可以用二进制表示,使得每个数字(位、开关)为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
【讨论】:
【参考方案3】:正如我之前的其他人所提到的,这意味着您最终会得到按位或的赋值。
可以通过取左侧和右侧的位模式并将它们放在彼此的顶部来说明按位或。
在每一列中:0 + 0 给出 0,1 + 0 给出 1,0 + 1 给出 1,1 + 1 给出 1。 在布尔值的上下文中:false OR false == false、true OR false == true、false OR true == true、true OR true == true。
以下是按位或的示例以及生成的位模式: var1(11) |= var2(14) --> var1(15)
1011 (11) 或 1110 (14) = 1111 (15)【讨论】:
【参考方案4】:所有a op= b
运算符都是a = a op b
的快捷方式。
但是,由于 C++ 允许单独覆盖 op
和 op=
,因此您依赖自定义类型的每个实现者来保持一致。
【讨论】:
我认为任何在@
和@=
中执行不同任务的人都是邪恶的:s
@Matthieu:C++ 是(而且,IMO 将永远是)一种语言,它可以为您提供大量的绳索让您上吊。
我不知道有谁将它们实现为具有不同的行为(除了复合赋值显然改变了它的左操作数)。但是实现一个而没有另一个是相当普遍的,例如iostreams 插入运算符。
但要傻到把绳子系在自己的脖子上是需要付出努力的。
a != b;
和a = a ! b;
不一样!【参考方案5】:
正如其他人所说,它是 v1 = v1 | v2;
的缩写
您可能会遇到的另一种用法是布尔值。
给定:
bool b = /*some value*/
而不是说:
if(a)
b = true;
你可能会看到:
b |= a;
【讨论】:
【参考方案6】:运算符|=表示按位或运算符赋值
【讨论】:
【参考方案7】:if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
按位或。
【讨论】:
【参考方案8】:它是Assignment by bitwise OR
v1 |= v2;
是:
v1 = v1 | v2;
【讨论】:
以上是关于“|=”操作在C++中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章