私は次のコードを持っていますが、それが何を意味するのか理解できません:
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=
オーバーライドできるため、一貫性を保つためにカスタム型の各実装者に依存します。
他の人が言っているように、それはv1 = v1 | v2;
あなたが遭遇するかもしれない別の使用法はブール値です。
与えられた:
bool b = /*some value*/
言う代わりに:
if(a)
b = true;
あなたが見るかもしれません:
b |= a;
整数は2進数で表すことができるため、各桁(ビット、スイッチ)は1(オン)または0(オフ)になります。
00000000 == 0
00000001 == 1
00000010 == 2
00000011 == 3
00000100 == 4
00001000 == 8
00010000 == 16
ビットごとのORは、2つのビットセットを「マージ」することによって2つの数値を結合します。
First number: 00110000
Second number: 00000010
Result: 00110010
入力番号のいずれかでビットが1の場合、結果では1になります。
2セットのビットの「オーバーラップ」を見つけるビットごとの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
多くの場合、結果は2つの変数のいずれかに配置する必要があります。
unsigned int c = a | b; // OR
c = a; // copy
したがって、簡単に言うと、これを1つのステップで実行できます。
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またはtrue==true。
次に、ビットごとのORと結果のビットパターンの例を示します。var1(11)| = var2(14)-> var1(15)
1011(11) または1110(14) = 1111(15)
演算子|=は、ビット単位のOR演算子による代入を意味します