小议 C#中的“&”按位与运算符

来源:互联网 发布:软件标准规范建设内容 编辑:程序博客网 时间:2024/05/23 22:19

 前段时间做项目,突然间看到一个同事在代码中这样写到:

 

            bool bRet = true ;
            bRet &= InsertNews();//这是一个插入方法,插入成功返回真,否则返回假

            if (bRet)
            {
                //成功 提示
            }
            else
            {
                //失败 提示
            }

 

其中对这句没有看明白 bRet &= InsertNews(),直接赋值就行了吗,从性能上讲直接赋值是最好。为什么还要与“&”一下呢,我就问了一下我的同事,人家就一句话,我灰溜溜的就回来了,人家说:“这C#的用法,你基础真差”。人家都这么说了就别问了。但是我一认为这样赋值从性能上不好。为什么不好一会说一下,大家一起探讨。今天在看一个另一个同事的代码时候又出现这样的的代码,我感觉这应该是个人的一种写代码的习惯。

 

 

现在我们来分析一下上面的代码:

 

我们先来说一下“&”运算符

 

对两个表达式执行按位“与”。

result = expression1 & expression2

参数

result

任何变量

expression1

任何表达式

expression2

任何表达式。

说明

& 运算符查看两个表达式的二进制表示法的值,并执行按位“与”操作。该操作的结果如下所示:

任何时候,只要两个表达式的某位都为 1,则结果的该位为 1。否则,结果的该位为 0。

个人解释说明:只有两变量的值都为1即为true时,返回真true,否则返回假false

 

我们可以把bRet &= InsertNews();这行代码拆开是这样的

 

bRet = bRet &InsertNews();

 

这样看会清楚一点就是bRet 和InsertNews()返回的两个bool型的变量进行比较,如果都为真的话 这个式子就为true

 

 这样写没有问题,一点问题都没有,能进行正确的判断。

这时性能问题出来了,因为程序这个时要进一次IF条件判断,我们用反编译工具查看IL代码

IL代码如下:

            if (bRet == true && InsertNews() == true)
            {
                return true;
            }
            else
            {
                return false
            }

如果我们直接赋值 bRet = InsertNews(); 仅一行代码就搞定问题了。能一行代码解决的事情为什么还“&”呢??

如果我们做的是一个日访问量不过几百人的小型网站的话你这样写还能勉强说的过去,因为能给你正确的结果。但是如果是做的是大型WEB网站的话,就不应该这样写,任何多余的一行代码都会影响网站的性能。一个人写几个没事,如果十个人,二十人的团队都这样写的话,那网站的性能会大大降低了。

      大型网站本身对负载要求就高,我们一定要提高输写代码的质量。写代码时尽量简单,简洁,明了。不要为了追求花哨写一些浪费性能的代码。我们要对我们做的东西负责,这也是一种工作态度。