C# 营运商及;使用按位and时,不能应用于int和bool类型的操作数

C# 营运商及;使用按位and时,不能应用于int和bool类型的操作数,c#,C#,如果我有以下C#代码: 我得到一个错误: operator & cannot be applied to operands of type int and bool 我可以做到: if (i & 1 == 1) 及 我试着把它们放在括号里: if ((i & 1 == 1) && b) if (i & 1 == 1 && (b)) if ((i & 1 == 1) && (b)) 但这没什么区别 我错过

如果我有以下C#代码:

我得到一个错误:

operator & cannot be applied to operands of type int and bool
我可以做到:

if (i & 1 == 1)

我试着把它们放在括号里:

if ((i & 1 == 1) && b)
if (i & 1 == 1 && (b))
if ((i & 1 == 1) && (b))
但这没什么区别

我错过了什么

我知道我可以把它们放在不同的假设中,但我想知道这里发生了什么。是虫子吗


我用的是VS 2015。目标框架是4.6.2。

优先规则<代码>=高于
&
&
;所以在左边的表达式(
i&1==1
)中,您实际上是指:
(i&1)==1
。那么组合表达式是:

if ((i & 1) == 1 && b)
事实上,奇怪的是,你说这是可行的:

if (i & 1 == 1)

因为我得到了CS0019“运算符'&'不能应用于'int'和'bool'类型的操作数!”

优先规则<代码>=高于
&
&
;所以在左边的表达式(
i&1==1
)中,您实际上是指:
(i&1)==1
。那么组合表达式是:

if ((i & 1) == 1 && b)
事实上,奇怪的是,你说这是可行的:

if (i & 1 == 1)

因为我得到了CS0019“运算符'&'不能应用于'int'和'bool'类型的操作数!”

if((i&1)==1&&b)
?谢谢Sami-做了trickIt,因为它会像下面那样执行:
if(i&(1==1)&b)
if((i&1)==1&&b)?谢谢Sami-做了trickIt,因为它会像下面那样执行:
if(i&(1==1)&b)
你说得对
if(i&1==1)
不起作用,但我的慢速电脑需要时间将其标记为错误,因此假设在我的快速测试中效果良好。@Graham检查编译器错误,intellisense有时会失败。如果(i&1==1)不起作用,你是对的,但我的慢速电脑需要时间将其标记为错误,所以假设在我的快速测试中它是好的。@Graham检查编译器错误,intellisense有时会失败。