按位运算|并且| c#中哪种情况为真或假

时间:2016-05-24 19:58:15

标签: c# bitwise-operators

我通过一个例子展示我的问题:

    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 :
  

无法应用于&#39; bool&#39;类型的操作数和&#39; int&#39;

  1. b变量为真b变量时,c#中的变量是什么?

  2. 如何解决错误?

  3. c ++什么时候才能识别出b变量是真的?另一方应该是(flag & a) != 0(flag & a) == 1或其他?

2 个答案:

答案 0 :(得分:1)

在C#中,您可以这样写:

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

你不能像在C ++中那样在C#中为bool分配一个int。

(在C ++中,编译器生成的代码与上面的代码有效地执行相同的操作,但是如果您只是尝试将int分配给bool,大多数C ++编译器都会生成警告。)

同样see the Visual C++ warning C4800,它告诉你在C ++中也这样写。

答案 1 :(得分:1)

在C / C ++中,false0true为非零(!0)。 C ++将每个值视为布尔值(例如,可以测试任何值的真实性)。

在C#中,类型更好地执行,因此您无法简单地测试数字的真实性。

您必须将结果表达式等同于:

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