2016-05-24 7 views
-2

真か偽:ビット演算|そして|どのような状況私は一例で私の質問を表示し、C#で

int a = 1 << 0; // = 1 
    int flag = 1; 
    bool b = flag & a; // = 1 < In c++ this line has no error but in c# error is like this : 

はタイプ「ブール」と 'int型のオペランドに適用することはできません

  1. b変数がの場合となり、b変数がの場合がC#

  2. どのようにエラーを修正しますか?

  3. b変数が本当にC++で認識されるのはいつですか?もう一方の側は(flag & a) != 0または(flag & a) == 1などにする必要がありますか? C#ので

+0

本当にわからないが、あなたは、C#で、すべてのC++コードをコンパイルすることはできません。 – Habib

+0

私が知る限り、C++は1を真とみなします。参照してください:http://stackoverflow.com/questions/2725044/can-i-assume-booltrue-int1-for-any-c-compiler – Habib

+0

@Habib C++は0を「偽」とみなし、他のすべての値「真」であること –

答えて

1

あなたはそうのように書く:

bool b = (flag & a) != 0; 

あなたがC++でできるようにあなたは、C#ではブール値にint型を割り当てることはできません。

(あなただけのブール値にint型を割り当てるしようとした場合、ほとんどのC++コンパイラは警告を生成しますが、C++では、コンパイラは、効果的に上記のコードと同じを行うコードを生成します。)

またsee the Visual C++ warning C4800、どのこの方法でC++で記述するように指示します。 C/C++、false

1

0であり、そしてtrueが非ゼロである(!0)。 C++はすべての値をブール値として扱います(inと同様に、任意の値がその真理値のためにテストされます)。

C#では、型がよりよく強制されるため、単純に真理の数をテストすることはできません。あなたが何かに得られた発現同一視する必要があると思います

:あなたの質問について

bool b = (flag & a) != 0; 
関連する問題