-2

I show my question by an example :

    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 :

Cannot be applied to operands of type 'bool' and 'int'

  1. When b variable is true and when b variable is false in c#?

  2. How fix the error?

  3. When does c++ recognize that b variable is true? The other side should be (flag & a) != 0 or (flag & a) == 1 or something else?

SilverLight
  • 19,668
  • 65
  • 192
  • 300
  • Not really sure about your question, you can't compile every c++ code in C#. – Habib May 24 '16 at 20:02
  • as much as I know, C++ assumes 1 to be true. See: http://stackoverflow.com/questions/2725044/can-i-assume-booltrue-int1-for-any-c-compiler – Habib May 24 '16 at 20:08
  • @Habib To be complete, C++ considers 0 to be `false` and every other value to be `true` – D Stanley May 24 '16 at 20:16

2 Answers2

1

In C# you write it like so:

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

You can't assign an int to a bool in C#, like you can in C++.

(In C++ the compiler generates code that effectively does the same as the code above, although most C++ compilers will generate a warning if you just try to assign an int to a bool.)

Also see the Visual C++ warning C4800, which tells you to write it this way in C++ too.

Matthew Watson
  • 104,400
  • 10
  • 158
  • 276
1

In C/C++, false is 0, and true is non-zero (!0). C++ treats every value as boolean (as in, any value can be tested for its truth-iness).

In C#, the types are better enforced, so you can't simply test a number for truthiness.

You'd have to equate the resulting expression to something:

bool b = (flag & a) != 0;
Gilad Naaman
  • 6,390
  • 15
  • 52
  • 82