A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小周学诚 中级黑马   /  2013-7-27 17:33  /  1497 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

&&和&||和|有什么区别?

5 个回复

倒序浏览
本帖最后由 马晓凤 于 2013-7-27 18:21 编辑

&:

1 &是位运算,按位与,参与运算的一般是两个整数。例如:5 & 3,由于5的二进制码是0101,3的二进制码0011,那么0101 & 0011 = 0001,所以结果就是1。

2 &也可以用作两个bool型数据的运算,同样,当两边都是ture,结果才是true,不过&在bool型数据运算时,不存在快速运算法则。比如:x&y:即使x是false,也会计算y表达式的

3 作为一元运算符时,(&) 也可作为一元运算符,返回操作数的地址


&&:&&有一个快速运算法则:当&&的左边计算的结果是false,那么无论右边表达式的结果是什么,&&的结果一定是false,此时,&&右边的表达式根本不会去运算。如果此时&&右边是一个函数调用,那么这个函数就不会被调用。(和&的区别
class Test
    {
        static bool fn1()
        {
            Console.WriteLine("第一个操作数执行了");
            return false;
        }
        static bool fn2()
        {
            Console.WriteLine("第二个操作数执行了");
            return true;
        }
        public static void Main()
        {  Console.WriteLine("result is {0}", fn1() & fn2());
           Console.WriteLine("result is {0}", fn1() && fn2());
           Console.ReadKey();
        }

|和||同理
| 操作符

1 对于整型,| 计算两个操作数的按位“或”结果。

2对于 bool 操作数,| 计算操作数的逻辑“或”结果;只有当两个操作数均为 false 时,结果才为 false。不存在当第一个操作数为true时就不计算第二个了


||

bool 操作数,只要第一个为true,第二个就不计算了

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
&&具有短路功能,如果第一个表达式为false,那么就不用执行第二个表达式,结果就是false  同理||也是这样 如果第一个表达式为true,那么就不用执行第二个表达式,结果是true
回复 使用道具 举报
&&在程序中是且的意思,前后的表达式必须都得满足才可以执行里面的代码。例如:
if(a==‘’ && b==‘’)
{
   执行代码;
}
在这段程序中,只有同时满足a==‘’ 与b==‘’两个条件,里面的代码才会执行,否则就不会执行;

“|” 是用来计算操作数的按位“或”结果,即使第一种情况存在,也要判断第二种情况;

“||”这个是或运算符,与上面的&&用法类似,其是在条件只要满足一个的情况下,就会执行里面的代码;如果第一个判断符合后面的就不会执行,直接执行里面代码;记住只要满足一个条件就可以执行里面的代码哦;

回复 使用道具 举报
与、或的短路问题,详细请看苏坤老师的c#编程基础第14节“逻辑表达式关系表达式习题”的视频教程。
回复 使用道具 举报
&、|和&&、||的区别:
&&、||在有些时候只计算一边表达式就可以得出整个表达式的结果,这时候另一边的表达式就会忽略不计算。
表达式1&&表达式2:如果表达式1为false,整个表达式的结果为false,则第二个表达式就不再计算,在&&中两边有一边是错的整个就是错的。
表达式1||表达式2:如果表达式1为true,整个表达式的结果为true,则第二个表达式就不再计算,在||中两边有一边是对的整个就是对的。
表达式1&表达式2:两个表达式都计算出结果。
表达式1|表达式2:两个表达式都计算出结果。


逻辑与的短路
int a=10;
int b=5;
bool result=  ++a>50 && ++b>1;
这时候如果输出结果a=11,b=5,按照正常应该是b=6,但是逻辑与中前面的关系表达式的结果为false,在逻辑与中只要有一个是错的整个就是错的,后面的关系表达式不需要运算就可以得出结果,整个逻辑表达式是错的,所以计算机就没有计算后面的关系表达式。在逻辑与中只有第一个关系表达式成立,计算机才会运算第二个关系表达式。

逻辑或的短路
int a=10;
int b=5;
bool result=  ++a>5|| ++b>1;
这时候如果输出结果a=11,b=5,按照正常应该是b=6,但是逻辑或中前面的关系表达式的结果为true,在逻辑或中只要有一个是对的整个就是对的,后面的关系表达式不需要运算就可以得出结果,整个逻辑表达式是对的,所以计算机就没有计算后面的关系表达式。在逻辑或中只有第一个关系表达式不成立,计算机才会运算第二个关系表达式。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马