我有以下代码,但我不明白这是什么意思:
var1 |= var2>0 ? 1 : 2;
任何人都可以帮助我!
我有以下代码,但我不明白这是什么意思:
var1 |= var2>0 ? 1 : 2;
任何人都可以帮助我!
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
它是按位或。
所有a op= b
运算符都是a = a op b
.
但是,由于 C++ 允许op
并被op=
单独覆盖,因此您依赖自定义类型的每个实现者来保持一致。
整数可以用二进制表示,因此每个数字(位、开关)为 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
正如其他人所说,它是v1 = v1 | v2;
另一种用法的缩写,您可能会遇到布尔值。
鉴于:
bool b = /*some value*/
而不是说:
if(a)
b = true;
你可能会看到:
b |= a;
正如我之前的其他人所提到的,这意味着您最终会得到按位或的分配。
按位或可以通过将左侧和右侧位模式放在一起来说明。
在每一列中: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)
运算符 |= 表示按位或运算符赋值