我有以下代码,我无法理解它是什么意思:
var1 |= var2>0 ? 1 : 2;
任何人都可以帮助我!
答案 0 :(得分:21)
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
这是按位 - 或。
答案 1 :(得分:12)
所有a op= b
运算符都是a = a op b
的快捷方式。
但是,由于C ++允许单独覆盖op
和op=
,因此您依赖自定义类型的每个实现者保持一致。
答案 2 :(得分:7)
答案 3 :(得分:6)
cond ? x : y
会返回x
,否则会返回y
。阅读Ternary Operator
a |= b
是a = a | b
的简写,它将a | b
分配给a
a | b
是a
和b
的{{3}}。 (例如2 | 3 = 3和1 | 2 = 3)
答案 4 :(得分:4)
正如其他人所说,它是v1 = v1 | v2;
的缩写
您可能遇到的另一种用法是布尔值
鉴于:
bool b = /*some value*/
而不是说:
if(a)
b = true;
你可能会看到:
b |= a;
答案 5 :(得分:4)
整数可以用二进制表示,因此每个数字(位,开关)是1(开)或0(关):
00000000 == 0
00000001 == 1
00000010 == 2
00000011 == 3
00000100 == 4
00001000 == 8
00010000 == 16
按位OR通过“合并”两组位来组合两个数字:
First number: 00110000
Second number: 00000010
Result: 00110010
如果输入数字的位数为1,则结果中的位数为1.
与按位AND比较,它找到两组位的“重叠”:
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
答案 6 :(得分:3)
正如我之前提到的其他人一样,这意味着你最终会按位OR进行作业。
可以通过左手和右手的位模式来说明按位OR,并将它们放在彼此的顶部。
在每列中:0 + 0给出0,1 + 0给出1,0 + 1给出1,1 + 1给出1.
在布尔值的上下文中:false OR false == false,true或false == true,false OR true == true,true或true == true。
以下是按位OR和结果位模式的示例: var1(11)| = var2(14) - > VAR1(15)
1011 (11) OR 1110 (14) = 1111 (15)
答案 7 :(得分:2)
运算符| =表示按位OR运算符分配