我通过一个例子展示我的问题:
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;
当b
变量为真且b
变量为时,c#中的变量是什么?
如何解决错误?
c ++什么时候才能识别出b
变量是真的?另一方应该是(flag & a) != 0
或(flag & a) == 1
或其他?
答案 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 ++中,false
为0
,true
为非零(!0
)。 C ++将每个值视为布尔值(例如,可以测试任何值的真实性)。
在C#中,类型更好地执行,因此您无法简单地测试数字的真实性。
您必须将结果表达式等同于:
bool b = (flag & a) != 0;