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'
When b
variable is true and when b
variable is false in c#?
How fix the error?
When does c++ recognize that b
variable is true? The other side should be (flag & a) != 0
or (flag & a) == 1
or something else?
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.
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;