[英]What does “|=” operation mean in C++?
我有以下代碼,我無法理解它是什么意思:
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=
,因此您依賴於每個自定義類型的實現者是一致的。
正如其他人所說,它是v1 = v1 | v2;
縮寫 v1 = 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
按位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
正如我之前提到的其他人一樣,這意味着你最終會按位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)
運算符| =表示按位運算符分配
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.