为什么要按位?

时间:2014-10-07 16:46:34

标签: c# bitwise-and

代码没有问题我只是好奇。我有这个代码我正在看,我正在试图弄清楚为什么他们做按位而不仅仅是常规&安培;&安培;

bool bValid = true;
.... // some code here
bValid &= IsASMConfigurationValid(this.m_ThisDevices[BDCASM], ref el);
.... // more code here
bValid &= IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el);

我只是想知道为什么这样做而不只是将bValid =设置为IsConfigValid。这很可能只是他的编码风格。

3 个答案:

答案 0 :(得分:2)

我可以看到一些选项:

请记住,bool操作数没有按位操作,所以它只是一个逻辑AND。

一切都非常个人化,最好的答案将来自真正的开发者。

答案 1 :(得分:2)

让我们看看这一行:

bValid &= IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el);

这可以改写为:

bValid = bValid && IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el);

if(bValid) { bValid = IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el); }

......或其他类似形式。 &=会使代码缩短几个字符,但是,正如您所发现的那样,主要是让代码更难阅读。

更新:正如评论者所指出的那样,& =并没有像&&amp ;;这样的bool短路。这样做仍然调用右边函数的真正替代方案是:

var temp = IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el); bValid = bValid && temp

答案 2 :(得分:0)

所以,首先,这里没有使用按位运算符。 &运算符有几个重载;它对数值类型都有许多按位重载,但它也有一个布尔值的重载,它执行逻辑并且不会发生短路。

至于为什么代码作者没有使用&&=运算符而不是&=运算符,那将是,因为没有&&=运算符,只有&=运算符。