悟道人生

渴望闲云野鹤的生活,面对自然,鸟鸣虫唱,星辰为伴,没有拘束,没有苦恼,有的只是神仙般的生活

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

一直以来对于逻辑与(&&)和按位与(&)的区别不是很确定。今天上网找了一下,然后也写代码验证了一下,现将其区别整理如下,供大家一起探讨。

  1. 操作数都为数字时

 a. 对于两个数字进行按位与(&),会将两数字转换为二进制,然后右对齐后(不足位补零),相应位做与操作,如11&3,11的二进制表示是1011,3的二进制表示是11,右对齐后做与操作后,如图所示:

        

         得到的结果是3。

        b. 对于两个数字进行逻辑与(&&),会将两个操作数都转换成Boolean逻辑值(不为0的数字则为true,否则为false),然后再做与操作。

       演示代码如下:

       static void Main()

        {

            int i = 11;  ///二进制是:1011

            int j = 3;  ///二进制是:0011

 

            int num = i & j;

            int num1 = Convert.ToInt32(Convert.ToBoolean(i) && Convert.ToBoolean(j));

 

            Console.WriteLine("按位与结果:{0}", num);

            Console.WriteLine("逻辑与结果:{0}", num1);

        }

  2.  操作数不为数字,为返回逻辑值的等式或方法

  a. 对于按位与(&),会对所有的操作数进行判断。看一下演示代码:

        static void Main()

        {

            if (3 == 5 & ReturnTrue())

            {

                Console.WriteLine("结果为真");

            }

        }

 

        static bool ReturnTrue()

        {

            Console.WriteLine("执行ReturnTrue方法");

            return true;

        }

        输出结果是:执行ReturnTrue方法

       分析如下:等式3==5返回结果false,由输出结果我们知道,在得到等式3==5返回false的情况下,仍然执行了ReturnTrue()方法,输出结果“执行ReturnTrue方法”

      b. 对于逻辑与(&&),会逐个判断操作数,当不符合时,后面的操作数将不再进行判断。看一下演示代码:

       static void Main()

        {

            if (3 == 5 && ReturnTrue())

            {

                Console.WriteLine("结果为真");

            }

        }

 

        static bool ReturnTrue()

        {

            Console.WriteLine("执行ReturnTrue方法");

            return true;

         }

            这段代码不会输出任何结果。

        分析如下:等式3==5返回结果false,由输出结果我们知道,在得到等式3==5返回false的情况下,ReturnTrue()方法并未执行。

得到的结果是3

posted on 2011-03-31 10:44  凌风有约  阅读(20897)  评论(0编辑  收藏  举报