12

私は次のコードを持っていますが、それが何を意味するのか理解できません:

var1 |= var2>0 ? 1 : 2;

誰でも助けてくれます!

4

8 に答える 8

21
if (var2 > 0)
  var1 = var1 | 1;
else 
  var1 = var1 | 2;

それはビット単位です-または。

于 2010-04-17T08:51:50.887 に答える
12

すべてのa op= b演算子はへのショートカットa = a op bです。

ただし、C ++では個別opop=オーバーライドできるため、一貫性を保つためにカスタム型の各実装者に依存します。

于 2010-04-17T08:53:14.567 に答える
7

そのAssignment by bitwise OR

v1 |= v2;

の略です:

v1 = v1 | v2;
于 2010-04-17T08:51:37.613 に答える
6

cond ? x : yxcondがtrueの場合は戻り、yそれ以外の場合は戻ります。三項演算子を読む

a |= ba = a | bに割り当てa | bている略記ですa

a | bおよびのビットごとのORです。(例:2 | 3=3および1|2 = 3)ab

于 2010-04-17T08:57:17.923 に答える
4

他の人が言っているように、それはv1 = v1 | v2; あなたが遭遇するかもしれない別の使用法はブール値です。
与えられた:

bool b = /*some value*/

言う代わりに:

if(a)
  b = true;

あなたが見るかもしれません:

  b |= a;
于 2010-04-17T08:57:05.947 に答える
4

整数は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
于 2010-04-17T09:32:13.523 に答える
3

私の前にいる他の人が言ったように、それはあなたがビットごとの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)
于 2010-04-17T09:30:18.627 に答える
2

演算子|=は、ビット単位のOR演算子による代入を意味します

于 2010-04-17T08:54:00.510 に答える