2013-06-11 4 views
5

私は基本的に次のようにありますこのビット単位ORは、null可能なintでnullを返すのはなぜですか?

int? myVal = null; 
    myVal |= 1; 
    bool stillNull = myVal == null; //returns true 

なぜこれがこのように動作するのでしょうか?ビットごとの演算子/オペランドの振る舞いの理解は非常に強くはないので、この場合単純な代入として扱われないという理由は見つけられませんでした。 MSDN

から
+0

「下位ビットが1に設定されているとわからない数量」の値はどうですか?値は "私が知らない別の量"にしかなりません。さて、もしあなたが 'bool? b =ヌル; b | =真; bool b2 = b == null; '次に、' quantityは私が真であるOR量の真理を知らないので ''偽 ''となります。 –

答えて

7

事前定義された単項および二項演算子と値型のために存在する任意のユーザ定義演算子もnull許容タイプによって使用されてもよいです。 オペランドがNULLの場合、これらの演算子はNULL値を返します;それ以外の場合、演算子は含まれた値を使用して結果を計算します。

+0

質問と回答。 ! –

+0

FYI:http://msdn.microsoft.com/en-us/library/2cf62fcy(v=vs.80).aspxへのリンクは壊れています。 – James

+0

@James - ありがとうございます! –