我有以下代码,但我不理解它的含义:
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=
,因此您需要依赖自定义类型的每个实现者保持一致性。
@
和 @=
中执行不同任务的人是邪恶的。:s - Matthieu M.a != b;
不等同于 a = a ! b;
! - Grant Paulv1 = v1 | v2;
的缩写。
你可能会遇到另一种用法,即布尔值。
例如:bool b = /*some value*/
不要说:
if(a)
b = true;
你可能会看到:
b |= a;
整数可以用二进制表示,因此每个数字(位、开关)都是1(开)或0(关):
00000000 == 0
00000001 == 1
00000010 == 2
00000011 == 3
00000100 == 4
00001000 == 8
00010000 == 16
按位或(Bitwise OR)通过“合并”两组比特来组合两个数字:
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
正如之前其他人提到的那样,这意味着您最终会通过按位OR获得分配。
按位OR可以通过将左侧和右侧的位模式放在一起来说明。
在每个列中: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。
这是按位OR的一个示例及其结果的位模式: var1(11) |= var2(14) --> var1(15)
1011 (11) OR 1110 (14) = 1111 (15)
int var1, var2
。 - polygenelubricants